任何人都可以解释(函数(){})的语法



function(){alert}

vm701:1未接收的语法:功能语句 需要功能名称

(function(){alert})

我在控制台中输入了两行代码。第二行只是()中的第一行。看看我得到了什么?()在这里做什么。有人可以解释其语法吗?

Parens告诉JavaScript将它们之间的表达解释为表达式。如果表达式有效,则在表达式中执行指令。因此,在这种情况下,Parens将无效的语法变成函数表达式。

所有语言主表达式被象征化为覆盖的表达,并被评估为括号表达式。

主表达式

处理生产

  PrimaryExpression[Yield] : CoverParenthesizedExpressionAndArrowParameterList[?Yield] 

解释coverparentized exprysepryseandArrowParameterList是 使用以下语法精制:

   ParenthesizedExpression[Yield] : ( Expression[In, ?Yield] ) 

遮盖的表达

静态语义:遮盖的表达

 CoverParenthesizedExpressionAndArrowParameterList[Yield] : (Expression[In, ?Yield] ) 

返回解析词汇的结果 令牌流匹配 CoverParenthesizedExpressionAndArrowParameterList[Yield]使用两者 ParenthesizedExpressionParenthesizedExpression[Yield]作为目标 符号取决于[产量]语法参数是否为 在CoverParenthesizedExpressionAndArrowParameterList时出现 匹配。

评估括号表达式。

运行时语义:评估

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList

exprCoveredParenthesizedExpression CoverParenthesizedExpressionAndArrowParameterList。返回结果 评估exprParenthesizedExpression : ( Expression )

返回 评估Expression的结果。这可能是类型参考。

请注意,此算法不将GetValue应用于 评估表达。这样做的主要动机是如此 诸如DELETE和TYPEOF之类的操作员可以应用于括号 表达式。

这种类型的函数称为匿名函数,通常分配给变量:

var fun1 = function(){ ... }

将匿名函数分配给变量fun1。

fun1
[Function: fun1]

因此,当您放置括号时,您正在执行该功能。

如果包装它,JavaScript将其评估为函数:

(function(){ ... })
[Function]

您还在用括号将功能包装:

的同一时刻执行它
(function(){ ... })()

如果您不放置名称,分配或执行该名称,则将无法以后执行它,JavaScript将丢弃错误。

最新更新