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

Are all function declarations & expressions created by called new Function() behind the scenes?

本文关键字:new 调用 Function 表达式 创建 函数 声明 amp      更新时间:2023-09-26

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

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

第13.2节中提到的第一步是"创建一个新的本地ECMAScript对象…",然后"将F的[[Class]]内部属性设置为"Function">

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

ECMA脚本规范的第15.3.2.1节谈到了新函数(…(表达式,而新函数(..(表达式本身引用了第13.2节中指定的相同逻辑。

关于新Function(…(表达式的项目符号编号11指定。。。

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

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

所以要回答这个问题,不。创建一个函数声明/表达式不会调用新的function(…(。

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

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