我使用数组函数。当我尝试放入一个函数时,它会出错。但是我输入全局,它可以正常工作。请帮助:<,告诉我详细信息...
function a(){
var arr = [];
for(var i=0;i<3;i++){
arr[i] = function(){
console.log(i);
}
}
return arr;
}
var myArray1 = a();
myArray1[0]();
/// 3
var myArray2 = [];
for(let i=0;i<3;i++){
myArray2[i]=function(){
console.log(i);
}
}
myArray2[0]();
/// 0
我希望myArray1[0]()
的输出为0,但实际输出为3
答案 0 :(得分:0)
用户var
而不是let
。有关更多详细信息,请查看本文(https://medium.com/front-end-developers/es6-variable-scopes-in-loops-with-closure-9cde7a198744)。
function a(){
var arr = [];
for(var i=0;i<3;i++){
arr[i] = function(){
console.log(i);
}
}
return arr;
}
var myArray1 = a();
myArray1[0]();
/// 3
var myArray2 = [];
for(var i=0;i<3;i++){ // user var instead of let here
myArray2[i]=function(){
console.log(i);
}
}
myArray2[0]();
/// 3