为什么以下代码提醒2
?
var f = (function x(){ return 1; }, function y(){ return 2; })();
alert(f);
我可以看到,y
函数以某种方式被执行,x
函数被忽略。 (我已确保将alert
放在两个函数中,并且仅调用alert
中的y
,这使我相信x
函数未被调用全部)
如果我删除y
功能,则会提醒1
。
发生了什么事?
答案 0 :(得分:14)
好的,让我们把它分解一下。
(function x(){ return 1; }, function y(){ return 2; })
是两个函数literals.Next使用comma operator。它评估表达式(两个函数)并返回最后一个。这个表达式的结果是:function y(){ return 2; }
这意味着剩下的表达式为:var f = (function y(){ return 2; })();
我们接下来要做的就是调用它(使用()
),它将2返回到变量f
;
答案 1 :(得分:5)
使用comma operator时,返回的值是最后一个元素的值,在您的情况下,函数y()
(返回2)
来自mozilla docs:
逗号运算符计算其两个操作数(从左到右) 并返回第二个操作数的值。
如果要包含多个,可以使用逗号运算符 需要单个表达式的位置中的表达式。最多 该运算符的常见用法是在a中提供多个参数 for loop。