为什么函数调用表达式使用逗号运算符表达式作为要调用的函数?

问题描述 投票:0回答:4

有人可以向我解释一下第二行发生了什么吗? :

var foo = function(){alert("hello?")};
(0,foo)();
javascript function-call comma-operator
4个回答
38
投票

臭名昭著的逗号表达式

a,b
计算两个参数并返回右侧表达式的值。

因此在这种情况下它与

foo();
完全相同。

这是一个更好的示例,它将帮助您了解发生了什么:

function foo() {
    print("foo called");
    return 123;
}
function bar() {
    print("bar called");
    return 456;
}
var result = (foo(), bar());
print("result:", result);

输出:

foo called
bar called
result: 456

逗号表达式也可能与逗号分隔函数参数相混淆。不一样!注意差异:

print("result:", foo(), bar() ); // 3 arguments, no comma operator
print("result:", (foo(), bar()) ); // 2 arguments, comma operator

9
投票

它计算第一个括号中的两个表达式并执行第二个表达式(在本例中是一个函数)。

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator


2
投票

由于 JavaScript 中的逗号运算符会计算多个操作数并返回最后一个操作数。 MDN:

逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。

你的表情

(0,foo)

返回

foo
,然后由括号调用,放在它后面。


1
投票

逗号将计算操作数并返回最后一个

第二行将返回 foo

© www.soinside.com 2019 - 2024. All rights reserved.