1

我有一个像这样的自调用函数:

var f = (function f(){ return "123"; }, 
         function g(){ return 2; },
         function h(){ return "test"; })();

typeof f;

typeof f始终是最后一个函数定义中返回的类型。就像如果h是最后一个,那么它是"string",但如果我删除h并拥有g最后一个,那么"number"

有人可以解释为什么吗?

4

3 回答 3

7

,因为函数是用逗号分隔的。

这将评估分隔的表达式,并返回最后一个表达式的结果。

var x = ("a", "b", "c");

console.log(x); // "c"

因此,在您的情况下,作为封闭()组的结果返回最后一个函数,这就是尾随()函数调用所调用的函数。

   // result from group---v   v---invoked
var f = (func1, func2, func3)()
于 2012-08-06T11:46:50.980 回答
2

让我们分解一下。

Javascript 中的逗号运算符计算多个表达式,并返回最后一个:

>>> "a", 1
1
>>> 1, "a"
"a"

因此,当您使用三个匿名函数并用逗号将它们串在一起时,它的计算结果为最后一个:

>>> (function f(){ return "123"; }, function g(){ return 2; }, function h(){ return "test"; })
function h(){ return "test"; }

评估该结果执行函数,返回"test".

逗号分隔列表中最后一个函数将被执行,并决定整体返回值。

于 2012-08-06T11:48:41.767 回答
1

comma运算符返回最后一项。你在做什么就像:

var f = function(){}, function(){}, "string";

这将产生f一个字符串,因为只有最后一个函数被调用。

于 2012-08-06T12:00:40.107 回答