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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值