jOp*_*cic 840 javascript function operators iif iife
我一直在寻找关于自我调用函数的信息,在某个地方我偶然发现了这个符号:
+function(){}
Run Code Online (Sandbox Code Playgroud)
有人可以向我解释一下+这个功能前面的符号意味着什么?
T.J*_*der 1301
它强制解析器将该部分+视为表达式.这通常用于立即调用的函数,例如:
+function() { console.log("Foo!"); }();
Run Code Online (Sandbox Code Playgroud)
如果没有那个+,如果解析器处于一个期望语句(可以是一个表达式或几个非表达式语句)的状态,那么这个单词function看起来就像是函数声明的开头而不是函数表达式,所以()跟随它(上面一行末尾的那些)将是语法错误(在该示例中,名称的缺失也是如此).用的+,它使一个函数表达,这意味着该名称是可选的,并且其导致的功能,其可以被调用的参考,因此,括号是有效的.
+只是其中一个选择.它也可以是-,!,~,或几乎任何其他一元运算符.或者,您可以使用括号(这是更常见的,但在语法上也不是更正确或更不正确):
(function() { console.log("Foo!"); })();
// or
(function() { console.log("Foo!"); }());
Run Code Online (Sandbox Code Playgroud)
Phi*_*l H 92
@TJCrowder的答案的子公司+通常用于强制数值转换值,因为这个SO答案解释.在这种情况下,它被称为'一元加运算符'(为了便于谷歌搜索).
var num = +variant;
Run Code Online (Sandbox Code Playgroud)
因此,在函数前面,它可以强制将函数的结果解释为数字.我怀疑它还没有发生,但理论上JIT可以使用它来编译函数作为一个仅限数字的函数等.但是,为了防止一元加上在一个更大的表达式中使用时是串联,你需要括号:
blah + (+(function(){ var scope; return "4"; })());
Run Code Online (Sandbox Code Playgroud)
Ja͢*_*͢ck 57
所以简短的回答是它通过以某种方式使用函数结果来防止语法错误.
您还可以使用void运算符指示您甚至不对返回值感兴趣的引擎:
void function() { console.log("Foo!"); }();
Run Code Online (Sandbox Code Playgroud)
当然,在整个事物上放置括号也可以达到这个目的.