我注意到你可以引用带或不带括号的函数。为什么?,有什么区别?
稍微一点,我注意到这有效:
window.onload = functionName;
然而,这不是:
window.onload = functionName();
有人可以解释为什么顶行代码可以工作而底部不行吗?
答案 0 :(得分:9)
()
版本未引用该功能。它调用函数并引用其返回值。
鉴于此功能:
function functionName() {
return "I'm a function";
}
这引用了函数:
// window.onload will reference the function, and invoked it when the page loads
window.onload = functionName;
...但是这引用了返回的字符串,这对window.onload
:
// the function is invoked immediately, so now window.onload references the
// string "I'm a function" that was returned
window.onload = functionName();
答案 1 :(得分:2)
编写func()
调用函数并计算其值。
写func
只是评估函数本身,而不是调用它
(就像写myVar
评估其值)
答案 2 :(得分:1)
在JavaScript中,函数是first class members,这意味着它们可以像语言中的其他数据类型一样对待。例如,您可以将函数赋值给变量,将其作为参数传递,从函数返回等。
鉴于此,functionName
仅引用函数对象,而functionName()
调用functionName
引用的函数。
这分配了functionName
引用的函数(它甚至不必是实际的函数名,它可能是分配给函数的变量 - 它是一个别名!例如, var functionName = myOtherFunction;
- 这会为myOtherFunction
)
window.onload = functionName;
虽然这会调用functionName
引用的函数并分配它的结果
window.onload = functionName();
答案 3 :(得分:0)
functionName()
调用该函数,然后在那里。另一方面,x = functionName
将函数'functionName'赋给x。从那时起,调用x()类似于调用functionName()。对于window.onload,您的浏览器将在页面加载时调用window.onload()。
答案 4 :(得分:0)
functionName
是保持对函数的引用的变量的名称。
functionName()
是对该变量中函数的调用。