码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-10 22:21:36      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:声明   com   文档   htm   函数   是的   code   href   定义   

如下,正常应该输出是的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就是当前的值
 
 
相关文档

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

标签:声明   com   文档   htm   函数   是的   code   href   定义   

原文地址:http://www.cnblogs.com/wzy1569178479/p/7341171.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!