function(){alert}
VM701:1未捕获的SyntaxError:函数语句 需要一个函数名称
(function(){alert})
我在控制台中输入了两行代码。第二行只是()
中的第一行。看我得到了什么? ()
在这里做什么。谁能解释它的语法?
答案 0 :(得分:2)
parren告诉JavaScript将它们之间的内容解释为表达式。如果表达式有效,则执行表达式中的指令。因此,在这种情况下,paren将无效的语法转换为函数表达式。
所有语言 Primary Expressions被标记为CoveredParenthesizedExpression,而Evaluated被标记为括号表达式。
处理作品时
PrimaryExpression[Yield] : CoverParenthesizedExpressionAndArrowParameterList[?Yield]
CoverParenthesizedExpressionAndArrowParameterList的解释是 使用以下语法进行了改进:
ParenthesizedExpression[Yield] : ( Expression[In, ?Yield] )
CoveredParenthesizedExpression
静态语义:CoveredParenthesized表达式
CoverParenthesizedExpressionAndArrowParameterList[Yield] : (Expression[In, ?Yield] )
返回词法分析的结果 令牌流匹配
CoverParenthesizedExpressionAndArrowParameterList[Yield]
使用任一ParenthesizedExpression
或ParenthesizedExpression[Yield]
作为目标 符号,取决于[Yield]语法参数是否为 在CoverParenthesizedExpressionAndArrowParameterList
出现时出现 匹配。
Evaluation带括号的表达式。
运行时语义:评估
PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
让
expr
为CoveredParenthesizedExpression
的CoverParenthesizedExpressionAndArrowParameterList
。返回结果 评估expr
。ParenthesizedExpression : ( Expression )
返回 评估
Expression
的结果。这可能是参考类型。注意:此算法不适用于
GetValue
的结果 评估表达式。这样做的主要动机是 删除和typeof等运算符可应用于括号 表达式。
答案 1 :(得分:0)
这种类型的函数称为匿名函数,通常分配给变量:
var fun1 = function(){ ... }
将匿名函数分配给变量fun1。
fun1
[Function: fun1]
因此,当您加上括号时,便是在执行该功能。
如果将其包装,则javascript将其评估为函数:
(function(){ ... })
[Function]
您也可以在用括号将函数包装的同时执行它:
(function(){ ... })()
如果您没有输入名称,分配或执行名称,则以后将无法执行,而javascript将引发错误。