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

Posted 太阳你好 ☂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闭包循环问题-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就是当前的值
 
 
相关文档

以上是关于闭包循环问题-for循环只显示最后一个i的值的主要内容,如果未能解决你的问题,请参考以下文章

js作用域for循环闭包问题

利用闭包解决for循环里onclick事件不能捕捉实时i值问题

js闭包for循环总是只执行最后一个值得解决方法

JS中如何解决for循环中的延迟执行问题

闭包[closure]

通过取父级for循环的i来理解闭包,iife,匿名函数