3

我了解您不能将任何参数传递给addEventListener. 你必须这样做

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

但是让我们这样做的原因是什么?

4

2 回答 2

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);
于 2013-05-16T12:56:27.847 回答
3

addEventListener必须将函数对象作为它的第二个参数,但是没有理由说明该函数对象不能由另一个函数生成。也许您会对生成函数的高阶函数感兴趣:

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

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

generateAlertFunc接受参数并使用它们来构建一个新函数,该函数被传递给addEventListener.

于 2013-05-16T13:13:47.520 回答