为了账号安全,请及时绑定邮箱和手机立即绑定

在书中看见的JS例子,有点不太明白

在书中看见的JS例子,有点不太明白

茅侃侃 2019-04-08 11:19:30
讲的是闭包的问题函数的执行环境我明白,闭包感觉有点相似于java中的内部类(不知有错没),书上举了一个下面的例子functioncreateFunctions(){varresult=newArray();for(vari=0;i
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

闭包又见闭包...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现在是多少有关系吗?毫无关联!
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 430 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信