JavaScript加号在函数名前面

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

+function(){} 

有人可以向我解释function前面的+符号是什么意思吗?

它强制parsing器将+的部分视为expression式。 这通常用于立即调用的函数,例如:

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

如果没有+ ,那么如果parsing器处于期望一个语句(可以是一个expression式或几个非expression式语句)的状态,那么function看起来就像函数声明的开始,而不是函数expression式 ,所以()后面的那个(上面那行末尾的那个)将会是一个语法错误(在这个例子中,就像名字的缺失一样)。 使用 + ,它使它成为一个函数expression式,这意味着该名称是可选的,并且导致对该函数的引用,这可以被调用,所以括号是有效的。

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

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

子公司@TJCrowder的答案, +通常用于强制数值转换的值, 因为这个答案解释 。 在这种情况下,它被称为“一元加运算符”(为了方便谷歌search)。

 var num = +variant; 

所以在函数前面,可以强制函数的结果被解释为一个数字。 我怀疑它发生了,但理论上,JIT可以使用它来编译函数作为一个数值函数等。但是,为了防止一元加号在更大的expression式中使用时,您需要括号:

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

所以简单的回答是,通过使用函数结果可以防止语法错误。

您还可以通过使用void运算符来指示引擎,您甚至不关心返回值:

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

当然,在整个事情上加上括号也是达到这个目的的。