Boy*_*ang 7 javascript scope event-handling javascript-events
请参阅jsfiddle:http: //jsfiddle.net/LsNCa/2/
function MyFunc() {
for (var i = 0; i < 2; i++) { // i= 0, 1
var myDiv = $('<div>');
myDiv.click(function(e) {
alert(i); // both the two divs alert "2", not 0 and 1 as I expected
});
$('body').append(myDiv);
}
}
var myFunc = new MyFunc();
Run Code Online (Sandbox Code Playgroud)
当我点击它时,我希望div分别提醒"0"和"1".但他们都警告"2".
当我单击div并触发事件时,处理程序如何以及在何处找到变量i的值?
我知道添加一个闭包可以实现我的目标.但为什么?
function MyFunc() {
for (var i = 0; i < 2; i++) { // i= 0, 1
(function(j) {
var myDiv = $('<div>');
myDiv.click(function(e) {
alert(j);
});
$('body').append(myDiv);
})(i);
}
}
var myFunc = new MyFunc();
Run Code Online (Sandbox Code Playgroud)
上面的代码是你如何使它正常工作.没有闭包,你总是i的最后一个值.我们所做的是将i发布到闭包中,让运行时"记住"当时的值.
| 归档时间: |
|
| 查看次数: |
2918 次 |
| 最近记录: |