簡體   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