ECMAScript 2017:“13.2 创建函数对象”去了哪里(来自 ES5)?
Posted
技术标签:
【中文标题】ECMAScript 2017:“13.2 创建函数对象”去了哪里(来自 ES5)?【英文标题】:ECMAScript 2017: Where Did "13.2 Creating Function Objects" Go (from ES5)? 【发布时间】:2018-09-04 22:02:37 【问题描述】:在 ECMA-262, version 5.x(又名 ECMAScript 5 | ES5)中,曾经有一个名为 Creating Function Objects
的 13.2 节。
我一直在搜索该标准的最新版本 ECMAScript 2017(又名 ECMAScript 8 | ES8),但找不到类似的描述。
ES8 中的第 14.1 节称为Function Definitions
,与 ES5 中的第 13 节相同。就我所知。
他们是否删除了整块?我认为这是对定义新函数时实际发生的情况的非常有用的描述。
【问题讨论】:
14.1.20: Runtime Semantics: InstantiateFunctionObject + 14.1.21: Runtime Semantics: Evaluation @Andreas 谢谢。呃,他们让我们很难理解默认属性是如何创建和设置的。我专门寻找 .prototype 和 .constructor 属性,以及它们是如何形成的。 【参考方案1】:由于函数对象和函数语法的种类越来越多,这点有所改变。
在 ES5 中我们有
10 Executable Code and Execution Contexts
…
10.4 Establishing an Execution Context
…
10.4.3 Entering Function Code
10.5 Declaration Binding Instantiation
10.6 Arguments Object
…
13 Function Definition
(syntax and evaluation of declarations and expressions)
13.1 Strict Mode Restrictions
13.2 Creating Function Objects
13.2.1 [[Call]]
13.2.2 [[Construct]]
13.2.3 The [[ThrowTypeError]] Function Object
在 ES8 中我们有
9 Ordinary and Exotic Objects Behaviours
9.1 Ordinary Object Internal Methods and Internal Slots
9.2 ECMAScript Function Objects
9.2.1 [[Call]] ( thisArgument, argumentsList )
9.2.2 [[Construct]] ( argumentsList, newTarget )
9.2.3 FunctionAllocate ( functionPrototype, strict, functionKind )
9.2.4 FunctionInitialize ( F, kind, ParameterList, Body, Scope )
9.2.5 FunctionCreate ( kind, ParameterList, Body, Scope, Strict [ , prototype ] )
9.2.6 GeneratorFunctionCreate ( kind, ParameterList, Body, Scope, Strict )
…
14 ECMAScript Language: Functions and Classes
14.1 Function Definitions
…
14.1.18 RS: EvaluateBody
14.1.19 RS: IteratorBindingInitialization
14.1.20 RS: InstantiateFunctionObject
14.1.21 RS: Evaluation
14.2 Arrow Function Definitions
…
14.3 Method Definitions
…
14.4 Generator Function Definitions
…
14.5 Class Definitions
…
14.6 Async Function Definitions
…
14.7 Async Arrow Function Definitions
…
…
【讨论】:
以上是关于ECMAScript 2017:“13.2 创建函数对象”去了哪里(来自 ES5)?的主要内容,如果未能解决你的问题,请参考以下文章
ECMAScript 2017:字符串文字、StringValue、String value 和 SV 之间的区别