在函数表达式前面的JavaScript加号

问题描述 投票:851回答:3

我一直在寻找有关立即调用的函数的信息,而在我偶然发现此表示法的地方:

+function(){console.log("Something.")}()

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

javascript function operators iife self-invoking-function
3个回答
1313
投票

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

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

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

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

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

93
投票

@ TJCrowder的回答的子级,+通常用于强制数值as this SO answer explains的数字转换。在这种情况下,它称为“一元加号运算符”(为便于谷歌搜索)。


59
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.