为什么以下代码会发出警报2
?
var f = (function x(){ return 1; }, function y(){ return 2; })();
alert(f);
我能看到的是,y
函数正在以某种方式被执行并且x
函数被忽略了。(我确保我把alert
两个函数都放进去,只有alert
iny
被调用,这让我相信这个x
函数根本没有被调用)
如果我删除该y
功能,那么它会发出警报1
。
这是怎么回事?
为什么以下代码会发出警报2
?
var f = (function x(){ return 1; }, function y(){ return 2; })();
alert(f);
我能看到的是,y
函数正在以某种方式被执行并且x
函数被忽略了。(我确保我把alert
两个函数都放进去,只有alert
iny
被调用,这让我相信这个x
函数根本没有被调用)
如果我删除该y
功能,那么它会发出警报1
。
这是怎么回事?
好的,让我们稍微分解一下。
(function x(){ return 1; }, function y(){ return 2; })
是两个函数字面量。接下来使用逗号运算符。它计算表达式(两个函数)并返回最后一个。这个表达式的结果是:function y(){ return 2; }
这意味着剩下的表达式是:var f = (function y(){ return 2; })();
我们接下来要做的是调用它(使用()
),它将 2 返回到变量中f
;
当您使用逗号运算符时,返回的值是最后一个元素的值,在您的情况下,函数y()
(返回 2)
来自 Mozilla 文档:
逗号运算符计算其两个操作数(从左到右)并返回第二个操作数的值。
当您想在需要单个表达式的位置包含多个表达式时,可以使用逗号运算符。此运算符最常见的用法是在 for 循环中提供多个参数。