为什么我们不能在eventListener的监听器函数中传递参数?

时间:2016-06-13 10:33:09

标签: javascript

function myFunc(parameter1) {
    //function definition
}
document.getElementById("some Id").addEventListener("click", myFunc(myparameter));

为什么我不能将参数传递给eventListener中的myFunc()函数?我知道我可以用这种方式 -

document.getElementById("some Id").addEventListener("click", function() {
  myFunc(myparameter);
});

但为什么我不能直接这样做?

PS-我想知道W3C规定的规则是否应该直接遵循(我不应该问这个问题),还是每个规则背后都有原因?

2 个答案:

答案 0 :(得分:2)

myFunc(myparameter)现在执行函数,而不是在触发事件时执行。您希望传递一个执行myFunc的函数,并在调用时传递参数,即触发事件时。最直接的方法是:

.addEventListener('click', function () { myFunc(myparameter); })

可能不太明显的方法是Function.prototype.bind

.addEventListener('click', myFunc.bind(null, myparameter))

答案 1 :(得分:1)

您的代码中存在问题。 myFunc(myparameter)以正确的方式执行。您需要使用以下方式调用自定义函数:

document.getElementById("some Id").addEventListener("click", function () {
    myFunc(myparameter);
});