Javascript 为什么在传递参数时必须在addeventlistener中使用匿名函数?

Javascript 为什么在传递参数时必须在addeventlistener中使用匿名函数?,javascript,Javascript,因此,如果您有一个带参数的命名函数并调用该函数,那么在使用addEventListener时它不能正常工作,但是如果您将其包装在一个匿名函数中,那么它可以工作,为什么 <input type="button" value="click me" id="subBtn" /> <br /> <div id="myDiv">default text</div> 现在,如果myFunc不接受任何参数,那么这两种方法都可以使用。您必须将函数作为参数传递给a

因此,如果您有一个带参数的命名函数并调用该函数,那么在使用addEventListener时它不能正常工作,但是如果您将其包装在一个匿名函数中,那么它可以工作,为什么

<input type="button" value="click me" id="subBtn" /> <br />
<div id="myDiv">default text</div>

现在,如果myFunc不接受任何参数,那么这两种方法都可以使用。

您必须将函数作为参数传递给
addEventListener

但是,它不必是匿名的:

element.addEventListener("click", function IAmNotAnonymous(){
   myFunc("hey there buddy");
});
您可以使用函数调用,而无需函数表达式包装器。但是,该调用中返回的值必须是函数:

function myFunc2(arg) {
    return someFunction; // <-- This must be a function
}
element.addEventListener("click", myFunc2("hey there buddy"));

必须将函数作为参数传递给
addEventListener

但是,它不必是匿名的:

element.addEventListener("click", function IAmNotAnonymous(){
   myFunc("hey there buddy");
});
您可以使用函数调用,而无需函数表达式包装器。但是,该调用中返回的值必须是函数:

function myFunc2(arg) {
    return someFunction; // <-- This must be a function
}
element.addEventListener("click", myFunc2("hey there buddy"));

这一做法奏效的原因是:

function(){
   //code here
  }
这是一个函数声明,在单击事件发生之前不会被激发。这是一样的:

var foo = function(){
  //code here
};

element.addEventListener('click', foo, false);
但是,现在的问题是没有参数,因为只有在实际启动函数时才会粘贴参数。该操作隐藏在
addEventListener
中,无法直接访问

话虽如此,使用
.bind有一个简单的解决方法:

element.addEventListener('click', myFunc.bind(null, 'Hey there buddy'), false);
bind所做的是创建一个具有绑定范围(第一个参数,可能非常有用)和参数(后面的每个参数)的函数


这将有效地将绑定参数传递给命名函数,而无需匿名包装器。

此操作的原因:

function(){
   //code here
  }
这是一个函数声明,在单击事件发生之前不会被激发。这是一样的:

var foo = function(){
  //code here
};

element.addEventListener('click', foo, false);
但是,现在的问题是没有参数,因为只有在实际启动函数时才会粘贴参数。该操作隐藏在
addEventListener
中,无法直接访问

话虽如此,使用
.bind有一个简单的解决方法:

element.addEventListener('click', myFunc.bind(null, 'Hey there buddy'), false);
bind所做的是创建一个具有绑定范围(第一个参数,可能非常有用)和参数(后面的每个参数)的函数


这将有效地将绑定参数传递给命名函数,而无需匿名包装。

第二个参数是对函数的引用,在第二个示例中,您直接启动函数<代码>addEventListener(“单击”,myFunc,false)
将起作用,诀窍是通过它传递一个参数。要添加到上面的注释中,您需要执行
myFunc()
,并将该函数的结果(
undefined
)传递给
addEventListener
。第二个参数是对函数的引用,在第二个示例中,您直接启动该函数<代码>addEventListener(“单击”,myFunc,false)
将起作用,诀窍是通过它传递一个参数。要添加到上面的注释中,您正在执行
myFunc()
,并将该函数的结果(
undefined
)传递给
addEventListener
。您知道,如果我有参数,我只会使用匿名函数来触发它,我只是不知道你为什么要这样做,或者必须有另一个功能,当你明白为什么,而不是仅仅做它,这总是很好的,因为你知道它是有效的。谢谢你的解释。@dragonore我很高兴我能增加清晰度!作为旁注:
.bind
是javascript的一个非常强大和有用的部分,如果你不熟悉它,它值得研究。你知道,如果我有参数,我只会使用匿名函数来启动它,我只是不知道你为什么要这样做或必须有另一个函数,当你明白为什么,而不是仅仅去做,这总是很好的,因为你知道它是有效的。谢谢你的解释。@dragonore我很高兴我能增加清晰度!作为旁注:
.bind
是javascript的一个非常强大和有用的部分,如果您不熟悉它,那么值得研究一下。