在addeventlistener中如何使用没有括号的函数?

sr4lhrrt  于 2021-09-23  发布在  Java
关注(0)|答案(6)|浏览(287)

我不明白这是怎么回事 addItem()removeItem() 调用时不带括号 addEventListener('click', addItem) .

var addButton = document.getElementById('add');
addButton.addEventListener('click', addItem);

var removeButton = document.getElementById('remove');
removeButton.addEventListener('click', removeItem);

function addItem(){
    console.log('Add Button clicked');
}

function removeItem(){
    console.log('Remove Button clicked');
}
yqkkidmi

yqkkidmi1#

因为在这方面,, addItem 用作函数引用,而不是函数的返回值。
如果您这样做:

addButton.addEventListener('click', addItem());

然后 addItem 将立即执行,并且无论何时 addButton 已单击,则返回的值为 addItem (这是 undefined )将被称为。这将导致错误,因为 undefined 这不是一个函数。
这里,你是说当我点击 addButton ,查找我传递的函数引用,并执行它。
您也可以用两种不同的方式编写:

addButton.addEventListener('click', "addItem()");
addButton.addEventListener('click', function() {
    addItem();
});

以上两种方法仍然会产生与原始代码相同的输出。

0kjbasz6

0kjbasz62#

这是因为您将函数作为参数/参数传递给 addEventListener() 方法。如果您添加了parathesis,函数将立即执行,而这不是您想要的。你在告诉警察 addEventListener() 触发事件时要执行的函数。
希望这有帮助。

5cnsuln7

5cnsuln73#

这是js的核心功能。你可以在这里读到。
函数是函数对象。在javascript中,任何非基元类型(未定义、null、boolean、number或string)的内容都是对象。javascript中的对象用途极其广泛。因此,我们甚至可以将一个函数作为参数传递给另一个函数

7vux5j2d

7vux5j2d4#

您正在附加一个事件侦听器,它将调用该函数。如果您在回调中添加父项,则会收到错误,因为您执行了该调用

bejyjqdl

bejyjqdl5#

如果没有括号,就不会真正调用函数。不带括号的函数名是对函数的引用。

x33g5p2x

x33g5p2x6#

第二个论点是 addEventlistener 方法函数。您可以在全局中定义函数,而无需在第二个参数addeventlistener中添加括号。

相关问题