日期:2014-05-16  浏览次数:20331 次

关于闭包的一段代码,不太理解,请指教

function test(){
  var arr = new Array();
  
  for(var i=0;i<10 ;i++){
    arr[i] = function(num){
       return function(){
           return num;
       };  
    }(i);  //i这个传参不太理解
  }
  return arr;
}



------解决方案--------------------
i相当于调用匿名函数function(num)把这个i值传给num
------解决方案--------------------

    arr[i] = function(num){
       return function(){
           return num;
       };  
    }(i);

再继续截取

function(num){
       return function(){
           return num;
       };  
    }(i)

这里把里面的

       return function(){
           return num;
       };  

去掉,结果是:

function(num){
    }(i)

记住这个结果,我们把他分开来写:

function any(num){
    }
any(i);

看懂了吗?直接调用这个匿名函数,并将参数i传递进去