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

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

posted on 2013-09-25 10:26  wanglgkaka  阅读(681)  评论(0编辑  收藏  举报

导航