函数定义

2018-06-16 15:25 更新

语法

FunctionDeclaration : function Identifier ( FormalParameterListopt ) { FunctionBody } FunctionExpression : function Identifieropt ( FormalParameterListopt ) { FunctionBody } FormalParameterList : Identifier FormalParameterList , Identifier FunctionBody : SourceElementsopt

 语义

 产生式 FunctionDeclaration : function Identifier ( FormalParameterListopt ) { FunctionBody } 依照定义绑定初始化 (10.5) 如下初始化:

  1. 依照 13.2,指定 FormalParameterListopt 为参数,指定 FunctionBody 为 body,创建一个新函数对象,返回结果。运行中的执行环境的 VariableEnvironment 传递为 Scope。如果 FunctionDeclaration 包含在 严格模式代码 里或 FunctionBody 是 严格模式代码 ,那么传递 true 为 Strict 标志。

 产生式 FunctionExpression : function ( FormalParameterListopt ) { FunctionBody } 的解释执行如下:

  1. 依照 13.2,指定 FormalParameterListopt 为参数,指定 FunctionBody 为 body,创建一个新函数对象,返回结果。运行中的执行环境的 LexicalEnvironment 传递为 Scope。如果 FunctionExpression 包含在 严格模式代码 里或 FunctionBody 是 严格模式代码 ,那么传递 true 为 Strict 标志。

 产生式 FunctionExpression : function Identifieropt ( FormalParameterListopt ) { FunctionBody } 的解释执行如下:

  1. 令 funcEnv 为以运行中执行环境的 Lexical Environment 为参数调用 NewDeclarativeEnvironment 的结果。
  2. 令 envRec 为 funcEnv 的环境记录项。
  3. 以 Identifier 的字符串值为参数调用 envRec 的具体方法 CreateImmutableBinding(N)。
  4. 令 closure 为依照 13.2,指定 FormalParameterListopt 为参数,指定 FunctionBody 为 body,创建一个新函数对象的结果。传递 funcEnv 为 Scope。如果 FunctionExpression 包含在严格模式代码 里或 FunctionBody 是 严格模式代码 ,那么传递 true 为 Strict 标志。
  5. 以 Identifier 的字符串值和 closure 为参数调用 envRec 的具体方法 InitializeImmutableBinding(N,V)。
  6. 返回 closure。

 可以从 FunctionExpression 的 FunctionBody 里面引用 FunctionExpression 的 Identifier,以允许函数递归调用自身。然而不像 FunctionDeclaration,FunctionExpression 的 Identifier 不能被范围封闭的 FunctionExpression 引用,也不会影响它。

 产生式 FunctionBody : SourceElementsopt 的解释执行如下:

  1. 如果这个 FunctionBody 所在 FunctionDeclaration 或 FunctionExpression 包含在严格模式代码内,或其 SourceElements 的指令序言 (14.1) 包含一个 use strict 指令,或满足 10.1 的任何条件,那么其代码是严格模式代码。如果 FunctionBody 的代码是严格模式代码,SourceElements 的解释执行为以下的严格模式代码步骤。否则,SourceElements 的解释执行为以下的非严格模式步骤。
  2. 如果 SourceElements 是当前的,则返回 SourceElements 的解释执行结果。
  3. 否则返回 (normal, undefined, empty)。


以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号