Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有人能解释一下Javascript ECMAScript语句值的用法吗?_Javascript_Ecmascript 6_Ecmascript 5_Ecma - Fatal编程技术网

有人能解释一下Javascript ECMAScript语句值的用法吗?

有人能解释一下Javascript ECMAScript语句值的用法吗?,javascript,ecmascript-6,ecmascript-5,ecma,Javascript,Ecmascript 6,Ecmascript 5,Ecma,我不熟悉Javascript,并注意到语句具有以下值: > x = 1 <- 1 > if (false) { x=1; } else { x=2 }; <- 2 >x=1 if(false){ x=1; } else{x=2}; 正常的完成值主要通过eval在用户代码中出现,尽管即使如此,它也不是非常常见。eval的返回值是执行语句的最终完成值。由于eval执行一系列语句,例如,当您运行eval(“4”)==4时,您并不是专门计算表达式的值,而是

我不熟悉Javascript,并注意到语句具有以下值:

> x = 1
<- 1

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

正常的完成值主要通过
eval
在用户代码中出现,尽管即使如此,它也不是非常常见。
eval
的返回值是执行语句的最终完成值。由于
eval
执行一系列语句,例如,当您运行
eval(“4”)==4
时,您并不是专门计算表达式的值,而是自动插入分号,因此您实际上是在运行
eval(“4;”
,然后获取该语句的完成值

在将来,完成值语义也可能会影响允许类似于

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

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

function fn()
  if (false) {
    return 1;
  } else { 
    2;
  } 
}
“if”的一个分支生成值为
1
的突然完成,另一个分支生成值为
2
的正常完成

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


因此,实际上,有一个完成值的事实与有一个返回值或抛出一个异常值完全相同,从规范的角度来看,在大多数情况下,如果它是非突然完成,它只是碰巧丢弃了该值。

你是在问为什么语句有值,或者为什么存在正常和突然完成?我问ng前一个-为什么语句有值(以及它们在实际应用中如何使用)。更新了问题以澄清。但我也不能回答第二个问题,所以我很想听到(在评论中)。对于任何中断正常代码流的代码,都存在突然完成,从而导致以后的代码被跳过,如
返回
中断
继续
,和
抛出
。该值将是返回值或抛出的错误。规范中的许多步骤基本上都说“如果这是突然的,不执行任何操作并将值传递给父级“而不是运行此代码。它们的唯一用法是在
eval
和REPLs中。