首页 新闻 会员 周边 捐助

js 闭包的应用

0
悬赏园豆:10 [待解决问题]

最近一直在看js闭包,对js闭包的概念看了很多,可是一看到代码就懵了,请大神指点一二。

闭包:有权利访问包含函数的内部的所有变量

//方法1
function createFunctions()
{
var result=new Array();
for(var i=0;i<10;i++)
{
result[i]=function(){
return i;
};
}
return result;
}
//方法2
function createFunctions()
{
var result=new Array();
for(var i=0;i<10;i++)
{
    result[i]=function(num){
    function()
   {
    return num;
   };
   }(i);
}
return result;
}

提问:方法1和方法2的结果是不一样的,1的值全部都是10,2的值是1,2,3,4.。。10

我想知道2是怎么理解的,result[i]是调用的一个方法,方法里再来一个方法,后面还加了个(i),不太明白

szchenrong的主页 szchenrong | 初学一级 | 园豆:175
提问于:2014-01-05 22:49
< >
分享
所有回答(2)
0

第一个数组存的是方法体吧,本身未执行。要result[0]();这样才能输出结果。

第二个中,function(){}(),这样的写法,是自调用方法,相当于将第二个小括号中的值,作为方法的参数使用,并返回结果。

不过不知道你的代码是不是贴错, function()   {     return num;   };直接放在方法体中,是不合法的吧。

幻天芒 | 园豆:37207 (高人七级) | 2014-01-06 09:39
0

方法2写错了吧  少了个 return

result[i]=function(num){ 

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

 

function(num){}(i) 意思是 创建一个方法并马上调用, 传入外部参数i,  方法内部则返回一个新的方法,返回num的值, 此时i传入成为内部参数num, 这样就被闭包保存下来.

将来调用 result[0]();   就会返回0

gunsmoke | 园豆:3592 (老鸟四级) | 2014-01-08 04:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册