我是JavaScript新手,想了解一些有关函数的知识。为什么在调用要运行的函数时,通常必须以括号()结尾,否则,它将仅显示该函数的内容。但是,当将事件侦听器绑定到元素时,调用该函数时可能不会使用括号,如果使用了括号,它将在页面加载后立即运行。 (使用setTimeout或SetInterval函数时,情况相同)。
答案 0 :(得分:1)
一旦您了解了JavaScript中的功能,功能就是数据以及可调用代码的单位,这实际上就非常简单。这意味着您可以传递它们,就像传递数字10
或字符串"test"
一样。
调用 功能时,必须包含括号。
foo(); // Invokes the foo function
在 引用 功能(作为要在某处使用的数据)时,您
别。事件回调是函数引用的示例。在以下示例中,字符串"click"
和函数foo
作为参数(数据)传递给某个元素的.addEventListener()
方法。该元素现在将注册foo
作为回调函数,以在发生/发生该元素的click
事件时进行调用。我们现在不希望调用foo
,我们只是想让元素知道以后可能调用什么功能。
element.addEventListener("click", foo); // References foo as the click event callback
function returnAfunction(){
// When this function is invoked, it will return
// (as data) another function:
return function(){
console.log("You did it!");
};
}
// Here, notice that the second argument does have parenthesis after it.
// This is because we want the function to run right now and whatever its
// returned value is will then become the actual event callback for the
// button element.
document.querySelector("button").addEventListener("click", returnAfunction());
<button type="button">Click me!</button>
答案 1 :(得分:0)
我认为这是因为在定义函数时,您可以向其传递一些参数,例如
const isUserValid = (username, password) => {
for (i = 0; i < database.length; i++) {
if (database[i].username === username && database[i].password === password) {
return true;
}
}
return false;
}
,当您要执行功能时也是如此。但是,当您添加事件监听器时,便会自动调用该函数以在其上执行(即单击)