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 - 禁用 href 并执行函数

c - 如何在递归中传递前一个参数

jquery - 检查 jquery 函数中是否单击了按钮

python - python中def有多个参数

JavaScript 命名函数自动调用

c++ - "const"函数有什么用?

javascript - 在我单击图像的位置创建一个带有文本的 div

javascript - 打开时,模态内的 Iframe 不会滚动到顶部

javascript - 标记不会出现在 Leaflet 的连续世界中

javascript - 单击边框时,项目单击不会触发事件