[英]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.