28

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

var foo = function(){alert("hello?")};
(0,foo)();
4

4 回答 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
于 2013-01-09T10:43:38.663 回答
9

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

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

于 2013-01-09T10:44:43.300 回答
2

由于 javascript 中的逗号运算符计算多个操作数并返回最后一个。医疗器械网络:

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

你的表情(0,foo)

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

于 2013-01-09T10:46:32.393 回答
1

逗号将评估操作数并返回最后一个

第二行将返回foo

于 2013-01-09T11:29:24.783 回答