一个简单的例子就是
function a() {
alert("something");
}
anything.onclick = a; // this is without parentheses
anything.onclick = a(); // this is with parentheses
两者有什么区别?
还有一件事:如果我定义相同的函数但这次返回 false,它会工作吗?
function a(){
alert("something");
return false;
}
最佳答案
区别在于 a()
调用函数,而 a
是函数。
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");
// }
关于javascript - JavaScript中带括号和不带括号()的调用函数有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14568291/