繁体   English   中英

谁能解释(function(){})的语法

[英]Can anybody explain the syntax of (function(){})

function(){alert}

VM701:1未捕获的SyntaxError:函数语句需要函数名称

(function(){alert})

我在控制台中输入了两行代码。 第二行只是()的第一行。 看我得到了什么? ()在这里做什么。 谁能解释它的语法?

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

所有语言的主表达式都标记为CoveredParenthesizedExpression,评估为带括号的表达式。

主要表达

处理生产时

  PrimaryExpression[Yield] : CoverParenthesizedExpressionAndArrowParameterList[?Yield] 

使用以下语法完善CoverParenthesizedExpressionAndArrowParameterList的解释:

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

CoveredParenthesizedExpression

静态语义:CoveredParenthesized表达

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

返回解析由匹配词法令牌流的结果CoverParenthesizedExpressionAndArrowParameterList[Yield]使用任一ParenthesizedExpressionParenthesizedExpression[Yield]作为根据[产率]语法参数是否存在当目标符号CoverParenthesizedExpressionAndArrowParameterList被匹配。

括号表达式的评估

运行时语义:评估

 PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList 

exprCoveredParenthesizedExpressionCoverParenthesizedExpressionAndArrowParameterList 返回评估expr的结果。 ParenthesizedExpression : ( Expression )

返回Expression的计算结果。 这可能是参考类型。

注意此算法不会将GetValue应用于评估Expression的结果。 这样做的主要动机是可以将诸如delete和typeof之类的运算符应用于带括号的表达式。

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

var fun1 = function(){ ... }

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

fun1

[Function: fun1]

因此,当您加上括号时,便是在执行该功能。

如果将其包装,javascript将其评估为一个函数:

(function(){ ... })

[Function]

您还可以在用括号将函数包装的同时执行它:

(function(){ ... })()

如果您没有输入名称,分配或执行名称,则以后将无法执行它,而javascript将引发错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM