码迷,mamicode.com
首页 > Web开发 > 详细

js的for循环闭包问题

时间:2015-03-31 17:37:30      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:

一个简单的例子,如果想循环输出数组中的每一个数值我们可以利用for循环来输出例如:

<script type="text/javascript">
var arr=["a","b","c","d","e"];
for (var i=0;i<arr.length;i++){
    document.write(arr[i]);
}
</script>

这是最常见不过的一种了,i从0循环到5把数组中的5个值都输出出来,这里的i正好是arr数组的下标,所以循环出来了~但是看下面的例子又会跟我们想的不一样

<a href="#">text</a> 
<br> 
<a href="#">link</a> 
<script type="text/javascript"> 
var as = document.getElementsByTagName(‘a‘);
for ( var i = as.length; i--; ) {
  as[i].onclick = function() {
    alert(i);
    return false;
  }
}
</script>

这个时候的会始终弹出-1来,因为里面的函数(onclick=function(){})根本没有i这个变量,换句话说i是无法在这个函数中调用的,因为没有传进值来,所以js会去回溯到父级去找这个i变量,当找到i的时候这个for循环其实已经循环完了,这样i就边城了-1所以每次弹出的就都是-1了,想解决这个问题也简单,用闭包传参的形式就可以了代码如下:

<a href="#">text</a> 
<br> 
<a href="#">link</a> 
<script type="text/javascript"> 
var as = document.getElementsByTagName(‘a‘); 
for ( var i = as.length; i--; ) { 
  as[i].onclick =( function() {
    alert(i); 
    return false; 
  })(i);
}
</script>

这样就可以把i作为参数传给里面的函数使用了。

js的for循环闭包问题

标签:

原文地址:http://www.cnblogs.com/woshikay/p/4381477.html

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