Maison > Questions et réponses > le corps du texte
**为什么在查找到i的时候i变成了3;**
function outer(){
for (var i = 0,arr=[];i<3;i++){
arr[i] = function(){
return i;
}
}
return arr;
}
var getNum = outer();
console.log(getNum[0](),getNum[1](),getNum[2]());
怪我咯2017-05-19 10:35:04
Parce que votre fonction anonyme function(){return i;} n'est pas exécutée, i ici n'est pas défini, puis renvoie arr, c'est function(){return i;} stocké dans le tableau lorsque vous obtenezNum[0]( ) c'est quand ce qui précède for (var i = 0, arr=[];i<3;i++){} est exécuté, i=3 donc getNum[0](),getNum[1](),getNum[2 ] () affiche les 3.
PHP中文网2017-05-19 10:35:04
C'est en ce moment. Le problème de fermeture est résolu de la même manière
function outer(){
for (var i = 0,arr=[];i<3;i++){
arr[i] = (function(index){
return function() {
console.log(index)
};
})(i)
}
return arr;
}
var getNum = outer();
console.log(getNum[0](),getNum[1](),getNum[2]());
高洛峰2017-05-19 10:35:04
Comme i est une variable périphérique, elle n'est trouvée que lors de l'appel.
Et lorsque vous l'appelez, la boucle est terminée et la valeur de i est déjà 3, vous ne pouvez donc obtenir que 3
PHP中文网2017-05-19 10:35:04
function outer(){ for (let i = 0,arr=[];i<3;i++){ arr[i] = function(){ return i; } } return arr; } var getNum = outer(); console.log(getNum[0](),getNum[1](),getNum[2]());
Le problème de la définition du domaine
var a changé pour laisser