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

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

  • 相关阅读:
    笔记44 Hibernate快速入门(一)
    tomcat 启用https协议
    笔记43 Spring Security简介
    笔记43 Spring Web Flow——订购披萨应用详解
    笔记42 Spring Web Flow——Demo(2)
    笔记41 Spring Web Flow——Demo
    Perfect Squares
    Factorial Trailing Zeroes
    Excel Sheet Column Title
    Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/wanglg/p/3338232.html
Copyright © 2011-2022 走看看