我有一个这样的自调用函数:
var f = (function f(){ return "123"; },
function g(){ return 2; },
function h(){ return "test"; })();
typeof f;
typeof f
始终是最后一个函数定义中返回的类型。如果h
是最后一个,那么它是"string"
,但如果我删除h
并且g
为最后一个,那么"number"
。
有人可以解释原因吗?
答案 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
成为一个字符串,因为只调用了最后一个函数。