zoukankan      html  css  js  c++  java
  • js的for循环闭包问题

    一个简单的例子,如果想循环输出数组中的每一个数值我们可以利用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(i){
        return function(){
          alert(i);
        }
      })(i);
    }
    </script>
    

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

  • 相关阅读:
    prayer OJ M
    51nod1295
    纪念第一次ak。。。
    noip2007-4
    51nod1344
    51nod1079
    51nod1537
    51nod1269Devu and Flowers
    python基本数据类型之列表list
    Python基本数据类型
  • 原文地址:https://www.cnblogs.com/woshikay/p/4381477.html
Copyright © 2011-2022 走看看