zoukankan      html  css  js  c++  java
  • js闭包解决多个点击事件

    <script>
         var severalObj=window.document.getElementsByName("button"); 
          for(var i=0;i<several.length.i++){
                 severalObj[i].onclick(){
                        alert(i);
                 }
          }
    </script>    

    通常我们在前端中要为若干个节点添加相同的事件,为了减少代码量便想出使用上面的代码对这些节点进行循环绑定事件。然而事情并未像之前预想到的那样,实验后会发现无论点击哪个元素都会弹出several.length,而不是我们之前预想的i。这正是闭包(匿名函数)要使用外部作用于中变量的结果。而却,这也是由于匿名函数本身无法传递参数(故无法维护自己的作用域)造成的。

    当函数调用外部变量是就构成一个闭包,里面的变量会受到别的地方影响,所以解决的方式为:构建一个只有该匿名函数本身才可以访问的闭包,保存只供本身使用的变量。

    for(var i=0;i<severalObj.length;i++){
         (function(i){
               severalObj[i].onclick=function(){......}
         })(i);
    }

    上面创建了匿名函数,从而构建了一个新的作用域。匿名函数需要传一个参数,所以在执行的时候需要传一个参数。也正是通过这个参数维护了中间状态。

  • 相关阅读:
    “是懒人造就了方法”——读后感
    多态性动手动脑
    数组问题随笔
    String java问题随笔
    java问题总结
    java问题随笔
    java一些问题的解答
    利用参数的值得返回来求和
    是懒人造就了方法——读后感
    大道至简读后感——JAVA伪代码
  • 原文地址:https://www.cnblogs.com/maxigang/p/5578040.html
Copyright © 2011-2022 走看看