为什么我放入函数,循环无法正常工作,但在全局范围内却可以正常工作

时间:2019-02-02 14:49:09

标签: javascript

我使用数组函数。当我尝试放入一个函数时,它会出错。但是我输入全局,它可以正常工作。请帮助:<,告诉我详细信息...

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

1 个答案:

答案 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