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

时间:2019-06-29 15:39:51

标签: javascript

function(){alert}

  

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

(function(){alert})

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

2 个答案:

答案 0 :(得分:2)

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

所有语言 Primary Expressions被标记为CoveredParenthesizedExpression,而Evaluated被标记为括号表达式。

Primary Expressions

  

处理作品时

  PrimaryExpression[Yield] : CoverParenthesizedExpressionAndArrowParameterList[?Yield] 
     

  CoverParenthesizedExpressionAndArrowParameterList的解释是   使用以下语法进行了改进:

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

CoveredParenthesizedExpression

  

静态语义:CoveredParenthesized表达式

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

返回词法分析的结果   令牌流匹配   CoverParenthesizedExpressionAndArrowParameterList[Yield]使用任一   ParenthesizedExpressionParenthesizedExpression[Yield]作为目标   符号,取决于[Yield]语法参数是否为   在CoverParenthesizedExpressionAndArrowParameterList出现时出现   匹配。

Evaluation带括号的表达式。

  

运行时语义:评估

PrimaryExpression : CoverParenthesizedExpressionAndArrowParameterList
     

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

     

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

     

注意:此算法不适用于GetValue的结果   评估表达式。这样做的主要动机是   删除和typeof等运算符可应用于括号   表达式。

答案 1 :(得分:0)

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

var fun1 = function(){ ... }

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

fun1

[Function: fun1]

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

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

(function(){ ... })

[Function]

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

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

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