Javascript 将带有2个参数的函数传递给addEvent侦听器方法
我试图将一个有2个参数的函数传递给特定按钮上的Javascript 将带有2个参数的函数传递给addEvent侦听器方法,javascript,function,parameter-passing,addeventlistener,Javascript,Function,Parameter Passing,Addeventlistener,我试图将一个有2个参数的函数传递给特定按钮上的addEventListener方法,但问题是在页面加载时直接执行函数,而不是在有人单击按钮时执行函数 我知道如何使它与匿名函数一起工作,但我需要它与特定定义的函数一起工作 function changeContent(elem,str){ elem.textContent = str; } var btn = document.querySelector("button"); var p = document.querySelector
addEventListener
方法,但问题是在页面加载时直接执行函数,而不是在有人单击按钮时执行函数
我知道如何使它与匿名函数一起工作,但我需要它与特定定义的函数一起工作
function changeContent(elem,str){
elem.textContent = str;
}
var btn = document.querySelector("button");
var p = document.querySelector("p");
var content = "Someone Clicked the Button!";
// add event listener on click to the button
// version 1 with anonymous function worked as expected
btn.addEventListener("click",function(){
p.textContent = content;
});
// version 2 with specific defined function not working as expected
btn.addEventListener("click",changeContent(p,content));
了解第二个版本不起作用的原因以及如何使其按预期工作
更新:
我想问的重要问题是:
有没有办法让changeContent(p,content)
功能正常工作
在addEventListener
方法
也将其包装在匿名函数中
btn.addEventListener("click",function() {
changeContent(p, content)
});
知道第二个版本不起作用的原因吗
因为changeContent
是中间调用的,因为您正在向它传递参数(用圆括号)。通常,可以通过两种方式将函数传递给函数:
passFunction(changeContent)代码>
passFunction(function(){changeContent(…);})代码>。匿名函数不会被中间调用,因为您没有向它传递参数李>
你能解释一下这一点吗
如果您将参数传递给函数,它将被调用。如果将其包装在(匿名)函数中,而不向(匿名)函数传递参数,则不会调用(匿名)函数,因此也不会调用包装函数
有没有办法不使用(匿名)函数包装它就可以工作
使用.bind
功能。第一个参数是this
的值。因此,在这种情况下需要3个参数:
btn.addEventListener("click",changeContent.bind(this, p, content));
有关更多信息,请参见您能否解释这一点更改内容是中间调用的?我理解,如果函数名(functionName(argument1,argument2))是这样调用的,您不能将函数传递给另一个函数。是这样吗?如果没有圆括号,它应该是这样的
functionName(functionName)
的确如此。如果将参数(圆括号)传递给函数,则调用该函数。更新了答案。真的。因为我们没有将圆括号传递给(匿名)函数,所以(匿名)函数不会被中间调用