繁体   English   中英

有人可以解释使用语句值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显式返回值。

这与完成的概念有关,它与价值相关,不论其类型(正常还是突然)?

正常完成值主要通过eval出现在用户代码中,尽管它们并不常见。 eval的返回值是已执行语句的最终完成值。 由于eval执行一个语句列表,例如当你运行eval("4") === 4 ,你没有专门评估一个值的表达式,自动分号插入正在进行,所以你实际上是运行eval("4;") ,然后获取该语句的完成值。

在将来,完成值语义也可能会影响do表达式提议 ,这将允许代码类似

const value = do {
  if (false) {
    1;
  } else { 
    2;
  }
};

value === 2;

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

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

“if”的一个分支以值1产生突然完成,另一个分支产生值为2的正常完成。

当执行时(从spec的角度来看),到达函数本身的末尾,它会说“这是一个返回/抛出,如果是这样,将它传播给函数的调用者。如果它是正常完成,它将只是丢弃该值并返回undefined

实际上,存在完成值的事实与具有返回值或抛出异常值完全相同,从规范的角度来看,它恰好在大多数情况下丢弃该值,如果它是非突然的完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM