我有一个简单的事件监听器:
function listen(evnt, elem, func) {
if (elem.addEventListener) // W3C DOM
elem.addEventListener(evnt,func,false);
else if (elem.attachEvent) { // IE DOM
var r = elem.attachEvent("on"+evnt, func);
return r;
}
return false;
}
我想用一个参数设置监听器。 (该参数不是由事件设置的,它是特定侦听器的一部分。
我的工作似乎是:
function setlistener (param){
listen ('custom event', document,
function (e){
run_func_with_param(param);
}
);
}
但是我不明白它是否正确,因为在事件被触发时不应该定义param。
我的问题是 - 是否正确调用run_func_with_param,每次都使用setlistener中为其设置的参数?换句话说,是否会记住param,并且当run_func_with_param作为事件的结果被调用时,它将被设置为正确的值? (对于同一事件,将有多个具有不同参数的侦听器。)
注意:请不要使用jQuery /其他库。 我在这种情况下使用自定义事件。
答案 0 :(得分:1)
使用匿名函数时,父作用域中的参数和局部变量仍可在匿名函数中使用。
因此,名为param
的参数在您传递给listen()
的匿名函数中可用。它不会传递给该函数 - 它只能直接从父作用域中获得。
这是你的功能,在评论中有一些注释:
function setlistener (param){
// param is available here as an argument to setlistener
// as a normal function argument
listen ('custom event', document, function (e) {
// param is still available here directly from the parent scope
// in this anonymous function.
// This is one advantage of using anonymous functions.
if (e.data.back_button==false){
run_func_with_param(param);
}
});
}