为什么不能直接使用addEventListener传递参数?

时间:2013-05-16 12:55:41

标签: javascript

我了解您无法将任何参数传递给addEventListener。你必须这样做

el.addEventListener("click", function(){callSomeFunction("myString");}, false);

但是,让我们以这种方式做到这一点的原因是什么?

2 个答案:

答案 0 :(得分:6)

因为如果你这样做了:

el.addEventListener("click", callSomeFunction("myString"), false);

它会立即执行callSomeFunction,然后将其值返回addEventListener,然后使用它。

例如,如果我有这个:

function callSomeFunction() {
  doSomeThings();
  return 10;
}

然后el.addEventListener("click", callSomeFunction("myString"), false);实际上会调用el.addEventListener("click", 10, false);

如果你有一个没有参数的函数,你可以直接传递它:

el.addEventListener("click", callSomeFunction, false);

答案 1 :(得分:3)

addEventListener必须将一个函数对象作为其第二个参数,但没有理由为另一个函数无法生成该函数对象。也许你会对产生函数的higher-order function感兴趣:

function generateAlertFunc(alertString) {
    return function() {
        alert(alertString);
    }
}

el.addEventListener("click", generateAlertFunc("myString"), false);

generateAlertFunc接受参数并使用它们来构建一个传递给addEventListener的新函数。