是所有功能声明&在幕后调用new Function()创建的表达式?

时间:2013-02-26 19:35:21

标签: javascript ecmascript-5 function-declaration ecma262

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

  

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

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

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

2 个答案:

答案 0 :(得分:1)

ECMA脚本规范的

section 15.3.2.1讲述了新的Function(...)表达式,新的Function(...)表达式本身引用了与第13.2节中指定的逻辑相同的逻辑。

关于新函数(...)表达式的子弹编号11指定了...

  

返回一个按照13.2中的规定创建的新Function对象,将P作为FormalParameterListopt和body传递给FunctionBody。将全局环境作为Scope参数传递,并将严格作为Strict标志传递。

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

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

答案 1 :(得分:0)

  

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

没有。它完全符合所说,创建一个新对象并使其成为一个功能。你期望在new Function其他人的幕后发生什么?相反,new Function也会在13.2中调用该函数实例化。