繁体   English   中英

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

[英]why can't you pass parameters directly using addEventListener?

我知道你不能将任何参数传递给addEventListener 你必须这样做

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

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

因为如果你这样做:

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);

addEventListener必须将一个函数对象作为其第二个参数,但是没有理由为什么该函数对象不能被另一个函数生成 也许你会对生成函数的高阶函数感兴趣:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM