我正在阅读 ECMA 262 v5 脚本中涉及“函数定义”的部分。对于函数声明和函数表达式,都提到了以下内容:
返回创建新Function对象的结果,如指定的13.2第 13.2 节中提到的第一步是“创建一个新的原生 ECMAScript 对象...”,然后“将 F 的 [[Class]] 内部属性设置为“Function”。
由于“创建一个新的 Funciton 对象”的措辞,我想知道在幕后是否通过调用 new Function(....) 创建了函数声明/表达式?
ECMA 脚本规范的
节谈到了 new Function(...) 表达式,而 new Function(...) 表达式本身引用了第 13.2 节中指定的相同逻辑。 关于新 Function(...) 表达式的项目符号 11 指定...
返回按照 13.2 中指定创建的新 Function 对象,将 P 作为 FormalParameterListopt 并将 body 作为 FunctionBody 传递。传入全局环境作为 Scope 参数,并将 strict 作为 Strict 标志。
第 13.2 节是函数创建逻辑的单一来源,无论是创建函数表达式、函数声明还是调用 Function 构造函数。
所以回答这个问题,不。创建函数声明/表达式不会调用 new Function(...)。
不。它完全按照所说的那样创建一个新对象并使其成为一个函数。您期望
new Function
else 的幕后会发生什么?相反,
new Function
也在 13.2 中调用该函数实例化。