了解 ECMAScript 的 ReturnIfAbrupt(AbstractOperation())
Understanding ECMAScript's ReturnIfAbrupt(AbstractOperation())
我知道有一些关于此的帖子,但我还没有找到一个很好的解释来解释当 AbstractOperation()
不是 abrupt completion 时 ReturnIfAbrupt(AbstractOperation())
语句的计算结果?
According to ECMAScript ReturnIfAbrupt(AbstractOperation()) means:
- Let hygienicTemp be AbstractOperation().
- If hygienicTemp is an abrupt completion, return hygienicTemp.
- Else if hygienicTemp is a Completion Record, set hygienicTemp to hygienicTemp.[[Value]].
Where hygienicTemp is ephemeral and visible only in the steps pertaining to ReturnIfAbrupt.
以[[Construct]]操作的最后一行为例:
- 那一行是
Return ? envRec.GetThisBinding()
- 这是equivalent to:
Return ReturnIfAbrupt(envRec.GetThisBinding())
- 假设
GetThisBinding()
没有抛出 Error
(即没有 突然完成),我不知道实际返回的是什么
- 上面引用的
ReturnIfAbrupt
定义明确表示 hygenicTemp
仅与定义本身中的步骤相关。它没有提示整个表达式的计算结果
您引用的位是针对未使用值的情况。但是您的 [[Construct]]
示例 是 使用值。
为此,您需要向下滚动一点:
Algorithms steps that say or are otherwise equivalent to:
- Let result be AbstractOperation(ReturnIfAbrupt(argument)).
mean the same thing as:
If argument is an abrupt completion, return argument.
If argument is a Completion Record, set argument to argument.[[Value]].
Let result be AbstractOperation(argument).
所以对于 Return ? envRec.GetThisBinding()
,当 envRec.GetThisBinding()
没有 return 突然完成时,[[Construct]]
return 中的那一行 [[Value]]
来自 envRec.GetThisBinding()
的非突然完成记录(this
值)。
我知道有一些关于此的帖子,但我还没有找到一个很好的解释来解释当 AbstractOperation()
不是 abrupt completion 时 ReturnIfAbrupt(AbstractOperation())
语句的计算结果?
According to ECMAScript ReturnIfAbrupt(AbstractOperation()) means:
- Let hygienicTemp be AbstractOperation().
- If hygienicTemp is an abrupt completion, return hygienicTemp.
- Else if hygienicTemp is a Completion Record, set hygienicTemp to hygienicTemp.[[Value]].
Where hygienicTemp is ephemeral and visible only in the steps pertaining to ReturnIfAbrupt.
以[[Construct]]操作的最后一行为例:
- 那一行是
Return ? envRec.GetThisBinding()
- 这是equivalent to:
Return ReturnIfAbrupt(envRec.GetThisBinding())
- 假设
GetThisBinding()
没有抛出Error
(即没有 突然完成),我不知道实际返回的是什么 - 上面引用的
ReturnIfAbrupt
定义明确表示hygenicTemp
仅与定义本身中的步骤相关。它没有提示整个表达式的计算结果
您引用的位是针对未使用值的情况。但是您的 [[Construct]]
示例 是 使用值。
为此,您需要向下滚动一点:
Algorithms steps that say or are otherwise equivalent to:
- Let result be AbstractOperation(ReturnIfAbrupt(argument)).
mean the same thing as:
If argument is an abrupt completion, return argument.
If argument is a Completion Record, set argument to argument.[[Value]].
Let result be AbstractOperation(argument).
所以对于 Return ? envRec.GetThisBinding()
,当 envRec.GetThisBinding()
没有 return 突然完成时,[[Construct]]
return 中的那一行 [[Value]]
来自 envRec.GetThisBinding()
的非突然完成记录(this
值)。