执行函数时确切地需要括号

时间:2018-11-24 19:07:32

标签: javascript function syntax function-call

我是JavaScript新手,想了解一些有关函数的知识。为什么在调用要运行的函数时,通常必须以括号()结尾,否则,它将仅显示该函数的内容。但是,当将事件侦听器绑定到元素时,调用该函数时可能不会使用括号,如果使用了括号,它将在页面加载后立即运行。 (使用setTimeout或SetInterval函数时,情况相同)。

2 个答案:

答案 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;
}

,当您要执行功能时也是如此。但是,当您添加事件监听器时,便会自动调用该函数以在其上执行(即单击)