有人可以解释语句值 Javascript ECMAScript 的用法吗?

Can somebody explain the use of statement values Javascript ECMAScript?

我是 Javascript 的新手,我注意到语句具有值:

> x = 1
<- 1

> if (false) {
    x=1;
  } 
  else { x=2 };
<- 2

有人可以解释为什么语句具有它们在实际应用程序中所用的值,因为函数需要通过 return.

显式 return 值

这是否与完成的概念有关,完成的概念与值相关,而不管它们的类型(正常或突然)?

正常完成值主要通过 eval 出现在用户代码中,尽管即使那样也不是很常见。 eval的return值是执行语句的最终完成值。由于 eval 执行语句列表,例如,当您 运行 eval("4") === 4 时,您并没有具体评估表达式的值,自动分号插入开始了,所以您实际上是 运行ning eval("4;") 然后获取该语句的完成值。

将来,完成值语义也可能会影响 the do expression proposal,这将允许像

这样的代码
const value = do {
  if (false) {
    1;
  } else { 
    2;
  }
};

value === 2;

您几乎可以将您的示例视为语言中一般完成值语义的一个很好的副作用。当您从一个函数 throwreturn 时,例如规范语言本身,仍然会遍历整个函数。返回或抛出本质上是说 "the completion value is this value" 类型为 "return" 或 "throw"。所以如果你有

function fn()
  if (false) {
    return 1;
  } else { 
    2;
  } 
}

"if" 的一个分支生成值为 1 的突然完成,另一个分支生成值为 2.

的正常完成

当执行(从规范的角度来看)到达函数本身的末尾时,它会说“这是一个 return/throw,如果是,将它传播给函数的调用者。如果它是一个正常的完成,它只会丢弃值和 return undefined.

所以实际上,有一个完成值的事实与有一个 return 值或抛出一个异常值是完全一样的,从规范的角度来看,它只是恰好丢弃了值大多数情况下,如果它是非突然完成。