闭包循环问题-for循环只显示最后一个i的值

如下,正常应该输出是的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就是当前的值
 
 
相关文档
posted @ 2017-08-10 20:07  约爱丽丝下午茶  阅读(1235)  评论(0编辑  收藏  举报