javascript闭包

关于闭包,要说清楚那要说半天,见我转载的文章:http://kazge.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元素时执行闭包,那么自然就是固定的值了。

正是具有这种特性闭包才如此的灵活。假如访问的上层变量是定义闭包时的值,那么闭包就不是闭包了。


Total views.

© 2013 - 2018. All rights reserved.

Powered by Hydejack v6.6.1