JavaScript加号在函数名前面

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

+function(){}

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


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

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

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

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

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

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

var num = +variant;

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

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

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

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

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

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

链接地址: http://www.djcxy.com/p/2781.html

上一篇: JavaScript plus sign in front of function name

下一篇: Javascript "this" pointer within nested function