我正在阅读提到Function definitions的ECMA 262 v5脚本部分。对于函数声明和函数表达式,提到了以下内容:
返回创建新Function对象的结果 13.2
第13.2节中提到的第一步是“创建一个新的本机ECMAScript对象......”然后“将F的[[Class]]内部属性设置为”Function“。
由于“创建一个新的Funciton对象”的措辞,我想知道是否在幕后,函数声明/表达式是通过调用new Function(....)创建的?
答案 0 :(得分:1)
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中调用该函数实例化。