javascript - JavaScript中带括号和不带括号()的调用函数有什么区别

标签 javascript function

一个简单的例子就是

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/

相关文章:

javascript - 在 Angular js中设置页面加载值

javascript - var functionName = function() {} vs function functionName() {}

c - 在 C 中的 return 语句中使用 -> 运算符

java - 如何在Java中找到分数的下限和余数?

javascript - 我应该在生成的代码中使用 "with"语句吗?

JavaScript 正则表达式文字与 RegExp 对象

javascript - 如果没有 iphone 和 ipad,如何知道任何 javascript/jquery 效果/插件都可以在这些设备上工作?

java - 从自定义 OnClickListener 调用函数

c++ - 检索函数调用图

javascript - 在JavaScript中处理嵌套对象