Pourquoi est-il émis 10 fois ? Le 10 inséré ne devrait-il pas être compris entre 1 et 9 ? Veuillez me donner une réponse à cet écueil
function save_i(){
var a = [];
for(var i = 0;i<10;i++){
a[i] = function(){
return i;
}
}
return a;
}
var c = save_i();
for(var i = 0;i<10;i++){
console.log(c[i]());
//10次 10
}
Il vous suffit de créer une fonction de fermeture pour enregistrer la valeur i lorsque la boucle for est exécutée, et elle peut être sortie dans l'ordre
Articles que j'ai lus dans le passé
Comprendre les fermetures nécessite que vous ayez écrit un code et que vous puissiez ensuite l'utiliser dans votre propre code. À part cela, vous ne pouvez le mémoriser que par cœur.
Les Chinois de la vieille école aiment laisser leurs enfants porter des choses quand ils sont très jeunes, mais ils ne savent pas ce que cela signifie et parfois ils ne peuvent pas l'expliquer clairement. Ils espèrent qu'ils le comprendront naturellement à un moment donné. futur
Ce qui précède
Si vous avez certaines connaissances de base. Il est recommandé de lire les journaux que j'ai écrits. Si vous ne comprenez toujours pas, laissez un message et demandez-moi
http://user.qzone.qq. .com/2084...
Chaque i en retour fait référence au même i externe, qui vaut 10
La portée des variables var est la portée de la fonction, pas la portée au niveau du bloc
La chaîne de portées a été générée lors de sa création.
c[i] = function(i){ return i; };
Lors de l'exécution, la portée actuelle n'a pas de i et le i de la portée supérieure save_i() est devenu 10. Pensez-vous que le résultat est 0~9 ? Pensez-vous que la portée supérieure est la portée globale ?a[i] est un ensemble de fonctions lorsqu'elles sont assignées, c'est-à-dire qu'il n'est pas exécuté, il n'obtient pas non plus i, et sa portée ne comprend pas non plus i
Lorsque vous l'exécutez ci-dessous, ce groupe de fonctions commence à rechercher le i qui peut être obtenu dans leur propre portée, qui est le 10 après l'exécution de la boucle
Le mot-clé
var déclare que la portée de la variable est la portée de la fonction, donc la variable i dans la boucle for sera promue. Tout ira bien si l'affiche modifie la section de la boucle for en une fonction auto-exécutable. par exemple :
fonction save_i(){
}