我们正在尝试理解以下示例:
function makeFunctionArray(){
const arr=[];
for(var i=0;i<5;i++){
arr.push(function(){console.log(i)})
}
return arr;
}
const functionArr = makeFunctionArray();
functionArr[0]();
function makeFunctionArray2(){
const arr=[];
for(let i=0;i<5;i++){
arr.push(function(){console.log(i)})
}
return arr;
}
const functionArr2 = makeFunctionArray2();
functionArr2[0]();
在第一个函数中,我用var声明了,因此具有函数的作用域。当我们返回arr时,在执行函数时,使用i = 5计算数组中的每个function()。
在第二个函数中,我用let声明,所以i的范围现在只是for循环。当返回arr时,我们有一个数组[0] - arr [4],每个数组都表示function(){console.log(i)}。因为当我们返回时我不再被定义,它是如何被评估的?