javascript闭包
关于闭包,要说清楚那要说半天,见我转载的文章:http://blog.ureshika.com/archives/257.html
我来说说这个经典问题:
<script language="javascript" type="text/javascript"> var li=document.getElementsByTagName("li"); for(var i=0;i<li.length;i++){ li[i].onclick=function(){alert(i);} } </script>
执行结果很“古怪”,每个li元素点击时都是显示相同的提示。
实际上理解了闭包的原理就很清楚了。
所谓闭包即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。
重点是它可以访问上层范围的局部变量,闭包执行时它如果访问上层变量,那么访问到的是上层变量在闭包执行时的值。
这样就好理解所谓的经典问题了:
代码中闭包中访问了i是上层变量,这个循环结束后,i值为li元素的个数,当点击li元素时执行闭包,那么自然就是固定的值了。
正是具有这种特性闭包才如此的灵活。假如访问的上层变量是定义闭包时的值,那么闭包就不是闭包了。