为什么javascript函数调用函数名后不包含'()'?

Jes*_*sse 1 javascript syntax javascript-events

window.onload = function() {
  document.getElementById('clickMe').onclick = runTheExample;
}

function runTheExample() {
  alert('running the example');
}
Run Code Online (Sandbox Code Playgroud)

对于id = clickMe的html输入按钮,这是onclick事件的简单事件处理程序.

在第2行,为什么函数调用runTheExample不会紧跟()?我认为要调用一个函数,你必须在开/关括号中传递它所需的任何变量/对象,如果函数不期望任何东西,你必须仍然包括开括号和右括号runTheExample().

cai*_*005 6

document.getElementById('clickMe').onclick = runTheExample;
Run Code Online (Sandbox Code Playgroud)

这里的目的是不是要叫runTheExample() ,但指定的参考功能runTheExample的onclick事件.

在内部,当触发onclick事件时,Javascript能够通过您在上面的代码中提供的引用来调用函数runTheExample.

片段

var myFunction = function() { return 42; };

// Assigning the reference
myObject.callback = myFunction;

myObject.callback(); // Has the same effect as calling myFunction();

// Assigning by calling the function
myObject.callback = myFunction();

myObject.callback;   // Returns 42
myObject.callback(); // Exception! Cannot call "42();"
Run Code Online (Sandbox Code Playgroud)

这不是特定于Javascript的.通过引用传递函数有多种语言版本.


Jos*_*ber 5

仅使用括号来调用(调用)函数.当你分配它时onclick,你只是通过引用传递它.

为了更好地理解这一点,请考虑另一种声明函数的方法:

var runTheExample = function () {
  alert('running the example');
}
Run Code Online (Sandbox Code Playgroud)

无论你使用什么方法,runTheExample都会包含对函数的引用(存在一些差异,比如在赋值之前函数引用不可用,但这是一个不同的故事).