如果我执行以下操作,变量将传递给附加的事件侦听器,其中我想要在添加事件侦听器时传递变量的值。
foo=a;
document.addEventListener('mousedown', function() { doSomething(foo) }, false);
foo=b;
doSomething(val){
alert(val);
}
因此它应警告“a”而不是“b”;
答案 0 :(得分:7)
类似的东西:
var foo = 'a';
document
.getElementById('foo')
.addEventListener('click', function(bar) {
// return the actual event handler function
return function() {
doSomething(bar);
};
}(foo) /* <-- call the anonymous function, passing in the current foo*/, false);
foo = 'b';
function doSomething (val) {
alert(val);
}
答案 1 :(得分:0)
由于foo是全局的,因此在检测到事件之前会在第3行覆盖foo。
您可能需要考虑获取foo的值并将其存储在对象或插件或类似内容中,以将其从正常的代码流中抽象出来或将其传递给回调函数:
document.addEventListener('mousedown',(function(outerFoo){doSomething(outerFoo);})(foo),false);