Javascript addEventListener";激活";自动地

Javascript addEventListener";激活";自动地,javascript,Javascript,基本问题我知道,但我在理解一些东西上有困难。我有一个模拟掷骰子的函数,其中面数作为参数: function throw(faces){ //My function here } 然后,我有按钮来模拟那些具有不同数字的启动,我希望它们在单击时启动throw: document.getElementById("4").addEventListener("click",throw(4)); document.getElementById("6").addEventListener("click",t

基本问题我知道,但我在理解一些东西上有困难。我有一个模拟掷骰子的函数,其中面数作为参数:

function throw(faces){
//My function here
}
然后,我有按钮来模拟那些具有不同数字的启动,我希望它们在单击时启动
throw

document.getElementById("4").addEventListener("click",throw(4));
document.getElementById("6").addEventListener("click",throw(6));
等等

但是当我启动CodePen()时,函数会自动启动(尽管参数正确),然后我就不能单击按钮了。我可以,但什么也没发生


我做错了什么?我觉得这是一个非常基本的东西,但我似乎无法理解。我已经看到,如果您将
throw
而不是
throw()
放入,函数不会自动启动,但是我该如何更改参数呢?

您的
throw
函数需要将函数返回到
addEventListener
。例如:

function throw ( faces ) {
    return function () {
        return Math.floor( Math.random() * faces );
    }
}
throw(4)
自动执行/调用该方法,因为您正在使用
()
调用函数/方法。如果希望按钮上的事件侦听器在单击时调用
throw(4)
,请使用以下命令:

document.getElementById("4").addEventListener("click", function(){
   throw(4);
});

您可以使用返回带有预设的
this
关键字和参数的新函数(在本例中为
null
):

或者定义一个新函数,在该函数中执行
throw

document.getElementById("4").addEventListener("click", function() {
    throw(4);
});
document.getElementById("6").addEventListener("click", function() {
    throw(6);
});
function throw(faces){
  // My function here
}

document.getElementById("4").addEventListener("click", throw.bind(null, 4));
document.getElementById("6").addEventListener("click", throw.bind(null, 6));
document.getElementById("4").addEventListener("click", function() {
    throw(4);
});
document.getElementById("6").addEventListener("click", function() {
    throw(6);
});