JavaScript中的自我调用功能

时间:2012-08-06 11:44:59

标签: javascript self-invoking-function

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

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

typeof f;

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

有人可以解释原因吗?

3 个答案:

答案 0 :(得分:7)

因为函数由,逗号运算符分隔。

这将评估分离的表达式,并返回 last 表达式的结果。

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

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

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

   // result from group---v   v---invoked
var f = (func1, func2, func3)()

答案 1 :(得分: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"

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

答案 2 :(得分:1)

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

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

这会使f成为一个字符串,因为只调用了最后一个函数。