我一直在寻找有关立即调用的函数的信息,而在我偶然发现此表示法的地方:
+function(){console.log("Something.")}()
有人可以向我解释该功能前面的+
符号是什么意思吗?
[强制解析器将+
之后的部分视为表达式。通常用于立即调用的函数,例如:]
+function() { console.log("Foo!"); }();
没有+
,如果解析器处于期望语句的状态(可以是一个表达式或几个非表达式语句),则单词function
看起来像函数的开头declaration 而不是函数expression,因此其后的()
(上面一行的末尾)将是语法错误(在该示例中,缺少名称也是如此)。 With +
,使它成为一个函数表达式,这意味着名称是可选的,并且导致对该函数的引用,该引用可以被调用,因此括号是有效的。]
+
只是选项之一。它也可以是-
,!
,~
或几乎任何其他一元运算符。或者,您可以使用括号(这是更常见的,但是在语法上既不正确,也不正确):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
@ TJCrowder的回答的子级,+
通常用于强制数值as this SO answer explains的数字转换。在这种情况下,它称为“一元加号运算符”(为便于谷歌搜索)。
因此简短的答案是,通过以一种或另一种方式使用函数结果,可以防止语法错误。