[英]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]
使用任一ParenthesizedExpression
或ParenthesizedExpression[Yield]
作为根据[产率]语法参数是否存在当目标符号CoverParenthesizedExpressionAndArrowParameterList
被匹配。
括号表达式的评估 。
运行时语义:评估
PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
让
expr
为CoveredParenthesizedExpression
的CoverParenthesizedExpressionAndArrowParameterList
。 返回评估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.