函数名前的javascript符号

JavaScript plus sign in front of function name

我一直在寻找有关自调用函数的信息,在某个地方我偶然发现了这个符号:

1
+function(){}

有人能给我解释一下函数前面的+符号是什么意思吗?


它强制解析器将+后面的部分视为表达式。这通常用于立即调用的函数,例如:

1
+function() { console.log("Foo!"); }();

如果没有+,如果解析器处于期望语句(可以是表达式或多个非表达式语句)的状态,那么单词function看起来像是函数声明的开头,而不是函数表达式,因此后面的()(上面一行末尾的那些)将不需要这将是一个语法错误(在这个例子中,名称的缺失也是如此)。对于+,它使其成为一个函数表达式,这意味着名称是可选的,并且会导致对函数的引用,可以调用函数,因此括号是有效的。

+只是其中一个选项。它也可以是-!~或任何其他一元运算符。或者,您可以使用括号(这是更常见的,但在语法上也不正确):

1
2
3
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());


作为@tjcrowder答案的附属,+通常用于强制数值转换,正如答案所解释的那样。在这种情况下,它被称为"一元加运算符"(为了便于搜索)。

1
var num = +variant;

所以在函数前面,它可以是一种强制将函数的结果解释为数字的方法。我怀疑这种情况是否会发生,但理论上,JIT可以使用这种方法将函数编译为仅限数字的函数等。但是,为了防止在较大的表达式中使用一元加号作为连接,您需要括号:

1
blah + (+(function(){ var scope; return"4"; })());


因此,简短的答案是,通过以某种方式使用函数结果,它可以防止语法错误。

您还可以使用void运算符指示引擎您甚至对返回值不感兴趣:

1
void function() { console.log("Foo!"); }();

当然,在整件事情上加上支架也有这个目的。