所有的函数声明和表达式都是在幕后调用 new Function() 创建的吗?

问题描述 投票:0回答:2

我正在阅读 ECMA 262 v5 脚本中涉及“函数定义”的部分。对于函数声明和函数表达式,都提到了以下内容:

返回创建新Function对象的结果,如指定的
13.2

第 13.2 节中提到的第一步是“创建一个新的原生 ECMAScript 对象...”,然后“将 F 的 [[Class]] 内部属性设置为“Function”。

由于“创建一个新的 Funciton 对象”的措辞,我想知道在幕后是否通过调用 new Function(....) 创建了函数声明/表达式?

ECMA 脚本规范的
javascript ecmascript-5 ecma262
2个回答
1
投票
第 15.3.2.1

节谈到了 new Function(...) 表达式,而 new Function(...) 表达式本身引用了第 13.2 节中指定的相同逻辑。 关于新 Function(...) 表达式的项目符号 11 指定...

返回按照 13.2 中指定创建的新 Function 对象,将 P 作为 FormalParameterListopt 并将 body 作为 FunctionBody 传递。传入全局环境作为 Scope 参数,并将 strict 作为 Strict 标志。

第 13.2 节是函数创建逻辑的单一来源,无论是创建函数表达式、函数声明还是调用 Function 构造函数。

所以回答这个问题,不。创建函数声明/表达式不会调用 new Function(...)。


0
投票
由于“创建一个新的 Funciton 对象”的措辞,我想知道在幕后是否通过调用 new Function(....) 创建了函数声明/表达式?

不。它完全按照所说的那样创建一个新对象并使其成为一个函数。您期望
new Function

else 的幕后会发生什么?相反,

new Function
也在 13.2 中调用该函数实例化。
    

© www.soinside.com 2019 - 2024. All rights reserved.