有人可以向我解释第二行发生了什么事吗? :
var foo = function(){alert("hello?")};
(0,foo)();
答案 0 :(得分:38)
臭名昭着的逗号表达式a,b
计算两个参数并返回右侧表达式的值。
因此,在这种情况下,它与foo();
完全相同。
Here's a better example可以帮助您了解正在发生的事情:
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
答案 1 :(得分:9)
它正在评估第一个括号中的两个表达式并执行第二个表达式(在本例中是一个函数)。
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Comma_Operator
答案 2 :(得分:2)
由于javascript中的逗号运算符计算多个操作数并返回最后一个操作数。 MDN:
逗号运算符计算它的两个操作数(从左到右)并返回第二个操作数的值。
您的表达式(0,foo)
返回foo
然后由paranthesis调用,放在它之后。
答案 3 :(得分:1)
逗号将评估操作数并返回最后一个
第二行将返回 foo