为了账号安全,请及时绑定邮箱和手机立即绑定

JavaScript+函数名前面的符号

JavaScript+函数名前面的符号

JavaScript+函数名前面的符号我一直在查看有关自调用函数的信息,在某个地方我偶然发现了这个表示法:+function(){}有人能跟我解释一下+在函数前面签名意味着/做什么?
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

它强制解析器处理以下部分+作为表达。这通常用于立即调用的函数,例如:

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

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

+只是其中一个选择。也可以是-!~或者任何其他一元运算符。或者,您可以使用括号(这是比较常见的,但在语法上既不多也不差):

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


查看完整回答
反对 回复 2019-06-20
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

附属机构+通常用于强制数值铸造的值。正如这个答案所解释的..在这种情况下,它被称为‘一元加运算符’(为了便于谷歌搜索)。

var num = +variant;

因此,在函数前面,它可以强制函数的结果被解释为一个数字。我对此表示怀疑,但从理论上讲,JIT可以使用它将函数编译为只用于数字的函数等等。然而,为了防止一元加上在较大表达式中使用的级联,您需要括号:

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


查看完整回答
反对 回复 2019-06-20
?
郎朗坤

TA贡献1921条经验 获得超9个赞

因此,简单的回答是,它通过以某种方式使用函数来防止语法错误。

还可以指示引擎您甚至对返回值不感兴趣,方法是使用void操作员:

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

当然,把支撑套在整件事情上也能达到这个目的。


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 1139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信