zoukankan      html  css  js  c++  java
  • java script 闭包

    闭包的概念真的是很绕,我就来点实际的代码。

    当我用下面的代码的时候 发生了闭包,当执行onclick事件的时候,变量一直引用了外部函数的变量,结果i总是4

    function newLoad() { //新建页面加载的事件           

         var temp ='' ;       

         for (var i = 1; i <=3; i++) {            

          var maodian = document.getElementById("maodian" + i); //html控件 id是以maodian为前缀                       

            maodian.onclick = function () {//为maodian添加单击事件

                         alert("you clicked maodian" + i); //给出点击反应               

                    }            

            }       

    }

     为了解决上面的问题,我们我们把产生闭包的代码提出来,创建一个方法。

    这样我们在执行 newLoad()的时候,就三次调用了newLoadExtracted方法,就可以

    获得当前的i值。

    function newLoad() { //新建页面加载的事件            

         var temp ='' ;        

         for (var i = 1; i <=3; i++) {            

          var maodian = document.getElementById("maodian" + i); //html控件 id是以maodian为前缀                       

            newLoadExtracted(i, anchor);

            }        

    }

    function newLoadExtracted(i, maodian) {                        

            maodian.onclick = function () {//为maodian添加单击事件

                         alert("you clicked maodian" + i); //给出点击反应                

                    }            

    }

    我个人理解闭包的发生就是变量作用域的问题,内部函数一直引用了外部函数的变量对象,会一直跟踪外部函数的变量变化。

    当我们新创建了一个函数后,把当前的变量值传递到新的函数中,新的函数 newLoadExtracted与函数newLoad就不存在变量依附的关系,

    所以变量之间就不会扯不清关系了。

  • 相关阅读:
    【WCF】授权策略详解
    【WCF】基址与默认终结点
    【Win 10 应用开发】手写识别
    【.net 深呼吸】连接Access数据库应注意的几点
    【WCF】自定义地址头的筛选器
    【Win 10 应用开发】InkToolBar——涂鸦如此简单
    【WCF】为终结点地址应用地址头
    【.net 深呼吸】EqualityComparer——自定义相等比较
    【.net 深呼吸】使用二进制格式来压缩XML文档
    PHP根据传入的经纬度,和距离范围,返回所有在距离范围内的经纬度的取值范围
  • 原文地址:https://www.cnblogs.com/wanglg/p/3338232.html
Copyright © 2011-2022 走看看