我有一个简单的事件监听器:
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不应该在事件被触发时定义。
我的问题是-每次都使用setlistener中为其设置的参数调用run_func_with_param,这是正确的方式吗?换句话说,当run_func_with_param作为事件的结果被调用时,是否会记住参数并将其设置为正确的值?(对于同一事件,将有多个具有不同参数的侦听器)。
注意:请不要使用jQuery/其他库。在本例中,我使用了一个自定义事件。
发布于 2013-04-15 01:01:51
使用匿名函数时,来自父作用域的参数和局部变量在匿名函数中仍然可用。
因此,在传递给listen()
的匿名函数中可以使用名为param
的参数。它不会被传递给该函数--它只是直接从父作用域获得。
这是你的函数,在注释中有一些注释:
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);
}
});
}
https://stackoverflow.com/questions/16001698
复制相似问题