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

关于块级作用域,闭包的问题

关于块级作用域,闭包的问题

慕哥9229398 2019-05-21 09:51:14
首先是这两段代码代码1:functioncreateFunctions(){varresult=newArray();for(vari=0;i
查看完整描述

2 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

代码1中,数组result中的函数都引用的createFunctions中的变量,而for循环结束之后,i的值为10,所以你打印出来的都是10。
这实际是闭包延迟计算的问题:
result[i]=function(){
returni;
};//在执行这个语句的时候,解释器并没有计算i的值,直到你调用`result[i]`的时候,这时i已经是10了
                            
查看完整回答
反对 回复 2019-05-21
?
侃侃无极

TA贡献2051条经验 获得超10个赞

result[i]=function(){
returni;
};
}
这段代码中returni中的i变量是自由变量,他的值是创建时时父作用域决定的,当函数执行时父作用域i已经为10了,所以输出10
了解一下自由变量,作用域和执行环境就懂了
                            
查看完整回答
反对 回复 2019-05-21
  • 2 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

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