10

为什么以下代码会发出警报2

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

我能看到的是,y函数正在以某种方式被执行并且x函数被忽略了。(我确保我把alert两个函数都放进去,只有alertiny被调用,这让我相信这个x函数根本没有被调用)

如果我删除该y功能,那么它会发出警报1

这是怎么回事?

4

2 回答 2

15

好的,让我们稍微分解一下。

(function x(){ return 1; }, function y(){ return 2; })

是两个函数字面量。接下来使用逗号运算符。它计算表达式(两个函数)并返回最后一个。这个表达式的结果是:function y(){ return 2; }

这意味着剩下的表达式是:var f = (function y(){ return 2; })();

我们接下来要做的是调用它(使用()),它将 2 返回到变量中f

于 2013-04-04T21:22:11.243 回答
5

当您使用逗号运算符时,返回的值是最后一个元素的值,在您的情况下,函数y()(返回 2)

来自 Mozilla 文档:

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

当您想在需要单个表达式的位置包含多个表达式时,可以使用逗号运算符。此运算符最常见的用法是在 for 循环中提供多个参数。

于 2013-04-04T21:24:14.200 回答