协慌网

登录 贡献 社区

JavaScript 加号在功能名称前面

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

+function(){}

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

答案

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

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

如果没有+ ,那么如果解析器处于一个期望语句(可以是一个表达式或几个非表达式语句)的状态,那么单词function看起来就像函数声明的开头而不是函数表达式 ,所以()以下它(那些在上面的行的端部)将是一个语法错误(如将一个名称的由于缺少,示例)。 使用 + ,它使它成为一个函数表达式,这意味着名称是可选的,并且导致对函数的引用,可以调用它,因此括号是有效的。

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

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

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

var num = +variant;

因此,在函数前面,它可以强制将函数的结果解释为数字。我怀疑它还没有发生,但理论上 JIT 可以使用它来编译函数作为一个仅限数字的函数等。但是,为了防止一元加上在一个更大的表达式中使用时是串联,你需要括号:

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

所以简短的回答是它通过以某种方式使用函数结果来防止语法错误。

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

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

当然,在整个事物上放置括号也可以达到这个目的。