js闭包解析(来自知乎)

js关于for循环中的闭包问题?

for(var i=0,arr=[];i<=3;i++) {
arr.push(function(){alert(i)});

arr[0](); // ?? 结果不是0
arr[1](); // ?? 全是4
改装后
for(var i=0,arr=[];i<=3;i++) {
arr.push(
(function(i){
return function(){
alert(i);
}
})(i)
);
}
使用闭包可以解决了,为什么第一次代码中的i读取的一直是I变量的最后的结果呢?
那个大神能给分析一下第一段代码的执行的具体步骤呢?
 
这个问题用js的 预解释+作用域+闭包 就能够解释得通,为了方便理解,我下面用两个图来说明一下:
posted @ 2016-10-19 11:40  it蛰伏者  阅读(162)  评论(0编辑  收藏  举报