for循环在javascript中适用频率是非常高的,当我们在for循环中嵌套一个函数,并且执行了这个时候就会成型闭包。形成的原理大家可以作用于链的角度去出发理解,形成闭包对于for循环的影响就是,循环输出的值都会是等于for循环的最后一个值。那么我们如何解决闭包,我们就拿for循环中的点击事件来做个例子来看下如何解决闭包问题。
<!DOCTYPE html> <html> <head> <title>chateach.com for循环闭包</title> </head> <body> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> </body> <script> var clicks = document.getElementsByTagName('li'); for(var i = 0 ; i < clicks.length ; i++) { clicks[i].onclick=function(i){ return function(){ console.log(i); console.log(clicks[i]); } }(i); } </script> </html>
如上述代码,是一个通过js点击列表的的时候获取对应的li标签的位置,通过一个for循环给每个对应的li标签创建一个点击事件。这个例子很明显就形成了闭包,如果不处理,最终输出的结果都会是“3 <li>4</li>”。