讲的是闭包的问题 函数的执行环境我明白,闭包感觉有点相似于java中的内部类(不知有错没),书上举了一个下面的例子
function createFunctions(){
var result =new Array();
for(var i=0;i<10;i++){
result[i]=function(){
return i;
};
}
return result;
}
书上说函数会返回一个函数数组 但是每个函数都是返回的10,并非自己的索引。这里不太明白...书上把代码改成了
function createFunctions(){
var result =new Array();
for(var i=0;i<10;i++){
result[i]=function(num){
return function(){
return num;
};
}(i);
}
return result;
}
说这样就能返回索引了... 头晕了(~@.@~)
闭包又见闭包...LZ你运行一下第一个createFunctions(),看看你得到结果是什么?
而不是你想象中的
醒醒!这是
result[i]
带给你的错觉!这就是闭包,匿名函数
function() {return i};
仅仅代表返回i
,那i
是多少哪?当匿名函数执行的时候,从作用域链中寻找,匿名函数的寻
i
历险记如下:嗯,我自己的作用域里没定义
i
,接着往上走,诶!老爹createFunctions
的作用域里定义了i
,它的值又是多少?这个for循环
(十年前就执行完了)里说了i
是10
!好,返回
10
。函数运行结束。现在说说第二个createFunctions。首先
这玩意叫立即执行函数表达式,字面意思,运行到这它立刻就执行了!
i=0时,它立刻就return了一个
同第一个分析的一样,我们看看这个
num
是多少自己作用域里没
num
,往上走,诶!老爹(同样没名字)的作用域里有num
,作为形参被赋值了0,找到了!跟祖父
createFunctions
里i
现在是多少有关系吗?毫无关联!