語法
FunctionDeclaration : function Identifier ( FormalParameterListopt ) { FunctionBody }
FunctionExpression : function Identifieropt ( FormalParameterListopt ) { FunctionBody }
FormalParameterList : Identifier FormalParameterList , Identifier
FunctionBody : SourceElementsopt
語義
產(chǎn)生式 FunctionDeclaration : function Identifier ( FormalParameterListopt ) { FunctionBody } 依照定義綁定初始化 (10.5) 如下初始化:
- 依照 13.2,指定 FormalParameterListopt 為參數(shù),指定 FunctionBody 為 body,創(chuàng)建一個(gè)新函數(shù)對(duì)象,返回結(jié)果。運(yùn)行中的執(zhí)行環(huán)境的 VariableEnvironment 傳遞為 Scope。如果 FunctionDeclaration 包含在 嚴(yán)格模式代碼 里或 FunctionBody 是 嚴(yán)格模式代碼 ,那么傳遞 true 為 Strict 標(biāo)志。
產(chǎn)生式 FunctionExpression : function ( FormalParameterListopt ) { FunctionBody } 的解釋執(zhí)行如下:
- 依照 13.2,指定 FormalParameterListopt 為參數(shù),指定 FunctionBody 為 body,創(chuàng)建一個(gè)新函數(shù)對(duì)象,返回結(jié)果。運(yùn)行中的執(zhí)行環(huán)境的 LexicalEnvironment 傳遞為 Scope。如果 FunctionExpression 包含在 嚴(yán)格模式代碼 里或 FunctionBody 是 嚴(yán)格模式代碼 ,那么傳遞 true 為 Strict 標(biāo)志。
產(chǎn)生式 FunctionExpression : function Identifieropt ( FormalParameterListopt ) { FunctionBody } 的解釋執(zhí)行如下:
- 令 funcEnv 為以運(yùn)行中執(zhí)行環(huán)境的 Lexical Environment 為參數(shù)調(diào)用 NewDeclarativeEnvironment 的結(jié)果。
- 令 envRec 為 funcEnv 的環(huán)境記錄項(xiàng)。
- 以 Identifier 的字符串值為參數(shù)調(diào)用 envRec 的具體方法 CreateImmutableBinding(N)。
- 令 closure 為依照 13.2,指定 FormalParameterListopt 為參數(shù),指定 FunctionBody 為 body,創(chuàng)建一個(gè)新函數(shù)對(duì)象的結(jié)果。傳遞 funcEnv 為 Scope。如果 FunctionExpression 包含在嚴(yán)格模式代碼 里或 FunctionBody 是 嚴(yán)格模式代碼 ,那么傳遞 true 為 Strict 標(biāo)志。
- 以 Identifier 的字符串值和 closure 為參數(shù)調(diào)用 envRec 的具體方法 InitializeImmutableBinding(N,V)。
- 返回 closure。
可以從 FunctionExpression 的 FunctionBody 里面引用 FunctionExpression 的 Identifier,以允許函數(shù)遞歸調(diào)用自身。然而不像 FunctionDeclaration,F(xiàn)unctionExpression 的 Identifier 不能被范圍封閉的 FunctionExpression 引用,也不會(huì)影響它。
產(chǎn)生式 FunctionBody : SourceElementsopt 的解釋執(zhí)行如下:
- 如果這個(gè) FunctionBody 所在 FunctionDeclaration 或 FunctionExpression 包含在嚴(yán)格模式代碼內(nèi),或其 SourceElements 的指令序言 (14.1) 包含一個(gè) use strict 指令,或滿足 10.1 的任何條件,那么其代碼是嚴(yán)格模式代碼。如果 FunctionBody 的代碼是嚴(yán)格模式代碼,SourceElements 的解釋執(zhí)行為以下的嚴(yán)格模式代碼步驟。否則,SourceElements 的解釋執(zhí)行為以下的非嚴(yán)格模式步驟。
- 如果 SourceElements 是當(dāng)前的,則返回 SourceElements 的解釋執(zhí)行結(jié)果。
- 否則返回 (normal, undefined, empty)。
更多建議: