代码之家  ›  专栏  ›  技术社区  ›  Magnus

了解ECMAScript的ReturnIfAbrupt(AbstractOperation())

  •  1
  • Magnus  · 技术社区  · 6 年前

    我知道有一些关于这个的帖子,但是我还没有找到一个好的解释 ReturnIfAbrupt(AbstractOperation()) 语句的计算结果为 AbstractOperation() 不是一个 abrupt completion ?

    ECMAScript ReturnIfAbrupt(AbstractOperation())

    1. 让hygienicTemp成为AbstractOperation()。
    2. 否则,如果hygienicTemp是完成记录,请将hygienicTemp设置为hygienicTemp。[[Value]]。

    其中,hygienicTemp是短暂的,仅在与ReturnIfAbrupt有关的步骤中可见。

    在最后一行 [[Construct]] 操作举例:

    1. 那条线是 Return ? envRec.GetThisBinding()
    2. equivalent to : Return ReturnIfAbrupt(envRec.GetThisBinding())
    3. 假设 GetThisBinding() Error (即:否 ),我不知道实际返回的是什么
    4. 引用的 ReturnIfAbrupt 上面的定义明确地说 hygenicTemp 仅与定义本身内的步骤相关。它没有给出表达式作为一个整体的计算结果
    1 回复  |  直到 6 年前
        1
  •  3
  •   Community CDub    5 年前

    不是吗 用过的。但是你的 [[Construct]] 例子 使用值。

    为此,您需要向下滚动一点:

    1. 让结果为AbstractOperation(ReturnIfAbrupt(argument))。

    1. 如果参数是突然完成的,则返回参数。

    2. 如果参数是完成记录,请将参数设置为参数。[[Value]]。

    所以对于 Return ? envRec.GetThisBinding() envRec.GetThisBinding() 返回 [[Value]] 非突然竣工记录 envRec.GetThisBinding文件() this 值)。