函数表达式前面的 JavaScript 加号

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

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

有人可以向我解释功能前面的标志意味着什么/做什么吗?+


答案 1

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

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

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

+只是其中一个选项。它也可以是 、 、 或几乎任何其他一元算子。或者,您可以使用括号(这更常见,但在语法上既不多也不少):-!~

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

答案 2

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

var num = +variant;

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

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