讲的是闭包的问题函数的执行环境我明白,闭包感觉有点相似于java中的内部类(不知有错没),书上举了一个下面的例子functioncreateFunctions(){varresult=newArray();for(vari=0;i
2 回答
Smart猫小萌
TA贡献1911条经验 获得超7个赞
闭包又见闭包...LZ你运行一下第一个createFunctions(),看看你得到结果是什么?[function(){returni},function(){returni},function(){returni},function(){returni}....]而不是你想象中的[function(){return0},function(){return1},function(){return2},function(){return3},....]醒醒!这是result[i]带给你的错觉!这就是闭包,匿名函数function(){returni};仅仅代表返回i,那i是多少哪?当匿名函数执行的时候,从作用域链中寻找,匿名函数的寻i历险记如下:嗯,我自己的作用域里没定义i,接着往上走,诶!老爹createFunctions的作用域里定义了i,它的值又是多少?这个for循环(十年前就执行完了)里说了i是10!好,返回10。函数运行结束。现在说说第二个createFunctions。首先=function(num){returnfunction(){returnnum;};}(i);这玩意叫立即执行函数表达式,字面意思,运行到这它立刻就执行了!i=0时,它立刻就return了一个function(){returnnum;};同第一个分析的一样,我们看看这个num是多少自己作用域里没num,往上走,诶!老爹(同样没名字)的作用域里有num,作为形参被赋值了0,找到了!跟祖父createFunctions里i现在是多少有关系吗?毫无关联!
添加回答
举报
0/150
提交
取消