为什么两个函数定义的结果用逗号连接?

时间:2013-04-04 21:20:53

标签: javascript return-value anonymous-function

为什么以下代码提醒2

var f = (function x(){ return 1; }, function y(){ return 2; })();
alert(f);

我可以看到,y函数以某种方式被执行,x函数被忽略。 (我已确保将alert放在两个函数中,并且仅调用alert中的y,这使我相信x函数未被调用全部)

如果我删除y功能,则会提醒1

发生了什么事?

2 个答案:

答案 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。