Kau*_*eya 0 javascript jquery closures
以下是我的javscript的一部分(使用jquery).
list = ['a', 'b', 'c'];
for(var i = 0 ; i< list.length ; i++) {
$("<a>click here</a>").
click(function(){
foo(list[i]);
}).
appendTo('#sometag');
}
function foo(val) {
console.log(val);
}
Run Code Online (Sandbox Code Playgroud)
无论您点击哪个标签,都会打印c.如何打印正确值???
它似乎正在使用i = 3的最后一个值,因此总是评估oc
在触发事件处理程序之前迭代完成时,您需要一个闭包新作用域,因此当单击发生时,循环已完成并且i是它设置的最后一个值,新作用域将i本地值保留到该作用域
list = ['a', 'b', 'c'];
for(var i=0; i<list.length; i++) {
(function(j) {
$("<a>click here</a>").click(function(){
foo(list[j]);
}).appendTo('#sometag');
}(i));
}
function foo(val) {
console.log(val);
}
Run Code Online (Sandbox Code Playgroud)
另一个选择是添加更多jQuery
list = ['a', 'b', 'c'];
$.each(list, function(index, item) {
$("<a />", {text : 'click here',
on : {
click : function() {
foo(item);
}
}
}).appendTo('#sometag');
});
function foo(val) {
console.log(val);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1101 次 |
| 最近记录: |