首页 > 编程语言 > 详细

JavaScript 闭包

时间:2016-04-26 15:50:39      阅读:174      评论:0      收藏:0      [点我收藏+]

JS中所有的function都是一个闭包,不过一般来说,嵌套的function所产生的闭包更为强大,也是大部分时候我们所谓的闭包。

我们可以把闭包理解为定义在一个函数内的函数。

var lis=document.getElementByTagName("li");
function test(nodes){
    for(var i=nodes.length-1;i>=0;i--){
      nodes[i].onclick=function(){
        alert(i);
      }
    }
}
test(lis);

当点击一个节点时,按照预期,应该弹出节点的序号,但实际弹出的是-1.

函数在执行的时候才初始化活动对象,当第一个函数执行时,i的值已经是-1了。使用立即执行的匿名函数,就会生成一个仅对该函数有效的变量 。

在闭包(这里就是匿名函数)里面定义的函数(这里是指事件处理函数)会「记住」它所处的上下文(这是指匿名函数中所有的变量)环境。

改正后的代码:

var lis=document.getElementByTagName("li");
function test(nodes){
    for(var i=nodes.length-1;i>=0;i--){
     (function(i){
      nodes[i].onclick=function(){
        alert(i);
      }
    }(i))
    }
}
test(lis);

 

JavaScript 闭包

原文:http://www.cnblogs.com/oygg/p/5435238.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!