【发布时间】:2013-02-14 06:54:38
【问题描述】:
我正在查看 section 13 或 ECMAScript 规范 (v. 5)。一个匿名函数表达式初始化如下:
返回创建一个新的函数对象的结果,如 13.2 中指定的,参数由 FormalParameterListopt 指定,主体由 FunctionBody 指定。传入正在运行的执行上下文的 LexicalEnvironment 作为 Scope。如果 FunctionExpression 包含在严格代码中或其 FunctionBody 是严格代码,则将 true 作为 Strict 标志传递。
这个逻辑非常类似于函数声明的初始化方式。但是,请注意命名函数表达式的初始化有多么不同。
- 让 funcEnv 成为调用 NewDeclarativeEnvironment 的结果,并将运行执行上下文的词法环境作为 论据
- 设 envRec 为 funcEnv 的环境记录。
- 调用 envRec 的 CreateImmutableBinding 具体方法,传入 Identifier 的 String 值作为参数。
- 让闭包是创建一个新的函数对象的结果,如 13.2 中指定的那样,其参数由 FormalParameterListopt 指定 和由 FunctionBody 指定的主体。传入 funcEnv 作为 Scope。经过 如果 FunctionExpression 包含在 true 中,则作为 Strict 标志 严格代码,或者如果它的 FunctionBody 是严格代码。
- 调用 envRec 的 InitializeImmutableBinding 具体方法,传递 Identifier 的 String 值和闭包作为参数。
- 返回关闭。
我知道命名/匿名函数表达式之间的一大区别是命名函数表达式可以在函数内递归调用,但我能想到的就是这些。为什么设置如此不同,为什么需要执行这些额外步骤?
【问题讨论】:
标签: javascript function anonymous-function ecmascript-5 ecma262