2

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

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

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

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

4

2 回答 2

1

ECMA 脚本规范的第 15.3.2.1 节谈到了 new Function(...) 表达式,并且 new Function(...) 表达式本身引用了与第 13.2 节中指定的相同的逻辑。

关于 new Function(...) 表达式的第 11 号项目符号指定...

返回按照 13.2 中指定的方式创建的新 Function 对象,将 P 作为 FormalParameterListopt 并将 body 作为 FunctionBody。将 Global Environment 作为 Scope 参数传入,并将 strict 作为 Strict 标志。

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

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

于 2013-02-26T20:26:29.783 回答
0

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

不,它完全按照所说的去做,创建一个新对象并使其成为一个函数。你希望在其他的幕后发生new Function什么?相反,new Function在 13.2 中也确实调用了该函数实例化。

于 2013-02-26T20:44:01.440 回答