9.2.1 [[Call]] ( thisArgument, argumentsList )
ECMAScript 函数对象 F 的 [[Call]] 内部方法使用参数 thisArgument 和 argumentsList(一个 ECMAScript 语言值列表)进行调用。 采取以下步骤:
- 断言:F 是一个 ECMAScript 函数对象。
- 如果 F.[[FunctionKind]] 是 "classConstructor",则抛出一个 TypeError 错误。
- 使 callerContext 变为正在运行的执行上下文。
- 使 calleeContext 变为 PrepareForOrdinaryCall(F, undefined)。
- 断言:calleeContext 是现在正在运行的执行上下文。
- 执行 OrdinaryCallBindThis(F, calleeContext, thisArgument)。
- 使 result 变为 OrdinaryCallEvaluateBody(F, argumentsList)
- 从执行上下文堆栈中删除 calleeContext,并将 callerContext 恢复为正在运行的执行上下文
- 如果 result.[[Type]] 被返回,返回 NormalCompletion(result.[[Value]])
- ReturnIfAbrupt(result)。
- 返回 NormalCompletion(undefined)。
注意:当在步骤 8 中从执行上下文堆栈中删除 calleeContext 时,如果它被中止并保留以供以后由可访问的存取器对象恢复,则不能被销毁。