如下,正常应该输出是的1,但是下面的输出结果是5
原因(参照js中的预解释篇)
首先会对变量进行预解释,带有var和function的变量(等号左边的,因为右边属于定义值)
上面在预解释中声明了a和i,然后循环中对a[i]进行定义,但是未执行即
a[0] = function(){ a[1] = function(){
return i; return i;
} } ...
当循环结束时调用a[1]()此时要返回i,这时会在同级中寻找i,未找到则追溯到上一级,这时上一级的i已经被加加成4,则无论是数组中的哪个值返回的都会是5
在解决这个问题时常常会使用立即执行函数的方式
因为立即执行函数在4-8行时声明、定义、执行一起完成了,所以找到的i就是当前的值
相关文档
http://www.cnblogs.com/ZinCode/p/5551907.html
https://www.zhihu.com/question/33468703
时间: 2024-12-24 13:29:10