JS闭包示例解释

时间:2018-02-26 18:04:44

标签: javascript closures

我们正在尝试理解以下示例:

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)}。因为当我们返回时我不再被定义,它是如何被评估的?

0 个答案:

没有答案