jram事件监听器与param

时间:2013-04-14 16:59:31

标签: javascript events anonymous-function

我有一个简单的事件监听器:

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 /其他库。 我在这种情况下使用自定义事件。

1 个答案:

答案 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);
        }
    });
}