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就不存在变量依附的关系,

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

  • 相关阅读:
    彻底卸载网易UU网游加速器的方法
    OO之策略模式
    android锁屏和finish()后activity生命周期的变化
    ARTS打卡计划第6周-TIPS-多台服务器免密码登录
    ARTS打卡计划第6周-REVIEW-超越编码的避免项目失败的软技能
    ARTS打卡计划第6周-ALGORITHM
    ARTS打卡计划第5周-SHARE-java构建树形结构
    ARTS打卡计划第5周-TIPS
    ARTS打卡计划第5周-REVIEW-SpringBoot的api版本化实践
    ARTS打卡计划第5周-ALGORITHM
  • 原文地址:https://www.cnblogs.com/wanglg/p/3338232.html
Copyright © 2011-2022 走看看