不同的是a()
调用函数whilea
是函数。
console.log( a() ); // false
console.log( a ); // function() {...}
为了清楚使用示例的第二部分时技术上会发生什么,让我们重新定义a
如下:
a = function() {
return 100;
};
并设置事件处理程序:
anything.onclick = a();
f()
不仅调用函数f
,而且返回它的返回值。所以当给函数调用设置变量或对象属性时,函数调用的返回值会被赋值。所以上面的语句实际上等效于:
anything.onclick = 100;
这没有意义,可能会导致错误。如果一个函数没有返回值,它的返回值是隐式的undefined
。
但是,如果您设置了一个等于a
而不调用它的变量,则与为该变量设置一个正则函数表达式相同:
var a = function() { ... },
b = a; // b = function() { ... }
b
将执行相同的操作a
。
因此,在您的示例中,请使用第一个,因为它是有道理的!将函数调用的返回值分配给事件处理程序的唯一情况是函数返回另一个函数。例如:
var x = function(xyz) {
return function() {
console.log(xyz);
};
};
anything.onclick = x("Hello World"); // = function() {
// console.log("Hello World");
// }