Je ne comprends pas comment expliquer le code ci-dessous et pourquoi il ne fonctionne pas comme prévu:setTimeout Callback explination
for (var i = 0; i < 16; i++) {
setTimeout(function() {
console.log(i);
}, 1)
}
// Prints "16" 16 times
Une solution à ce serait tout simplement en utilisant let
au lieu de var
dans la boucle, ou
for (var i = 0; i < 16; i++) {
(function (k) {
setTimeout(function() {
console.log(k);
}, 100)
})(i)
}
// Print "0" to "15"
une fonction auto-invoquante. Si je pouvais avoir une estimation éclairée, la portée de var serait liée au bloc fonctionnel, ou dans le cas de la portée globale, et les boucles for battraient la pile d'appels que produirait le setTimeout()
et depuis Javascript est lexical portée il rappelle toutes ces fonctions comme var i = 16
où d'autre part let i = 16
le gardera au bloc?
'setTimeout' exécute * après * la boucle où' I' est 16. – Li357
S'il vous plaît se référer [Comment fonctionne la fermeture] (http://stackoverflow.com/questions/111102/how-do-javascript-closures-work) – Rajesh