J'ai lu les pages pertinentes sur w3schools et d'autres questions similaires ici, mais je n'arrive pas à comprendre ce qui ne va pas dans la partie suivante:
var myfunc03 = function (i) {
document.getElementById('d01').innerHTML += 100-i+"<br>";
};
var myFunc01 = function() {
i=0;
while (i<100) {
setTimeout(myfunc03(i), 1000)
i++;
}
};
lorsque myFunc01();
est exécuté.
Il n'y a aucune pause et toutes les valeurs possibles pour i sont listées en même temps.
Y a-t-il une erreur logique ici?
Vous pouvez le faire plus simplement avec récursion :
var i = 0;
function f1() { ... };
function f() {
f1();
i += 1;
setTimeout(function() {
if(i < 100) {
f();
}
}, 1000);
}
f();
var i = 0;
var myfunc03 = function(i) {
document.getElementById('d01').innerHTML += 100 - i + "<br>";
};
var myFunc01 = function() {
myfunc03(i);
i += 1;
setTimeout(function() {
if (i < 100) {
myFunc01();
}
}, 1000);
}
myFunc01();
<div id="d01"></div>
function say(sentence) {
console.log(sentence);
}
function sayHello() {
say("Hello!");
}
var fn = sayHello;
var count = 10;
var ms = 1000;
function repeat(fn, count, ms) {
var i = 0;
function f() {
fn();
i += 1;
setTimeout(function() {
if (i < count) {
f();
}
}, ms);
}
f();
}
repeat(fn, count, ms);
Oui. Il y a 2 problèmes dans votre code:
myfunc03(i)
ne renvoie rien.Exemple de code:
var myfunc03 = function (i) {
setTimeout(function() {
document.getElementById('d01').innerHTML += 100-i+"<br>";
if (i < 100) {
i++;
myfunc03(i);
}
}, 1000);
};
var myFunc01 = function() {
myfunc03(0);
};
myFunc01();
<div id="d01"></div>
Je pense qu'il vous manque un point-virgule sur setTimeout et vous devriez essayer de passer les arguments de la façon suivante:
setTimeout(myfunc03, 1000*i, i);