Ecmascript 6 在if语句中声明变量(ES2016中的良好实践)

Ecmascript 6 在if语句中声明变量(ES2016中的良好实践),ecmascript-6,Ecmascript 6,在ES2016中,我想知道这是否是在if语句中声明变量的最佳实践: ECMA2016 在ES2016之前,使用var 使用ECMA2016,您不能在if块中声明新变量,然后在该块中使用otside。因此,您的变体看起来不错。ES5中的最佳实践是 var x; if (true) { x = 1 } else { x = 0 } 甚至 var x = true ? 1 : 0; 因为在功能范围的顶部定义一个var总是最清晰的(即使您还没有准备好分配任何东西给它),并且只定义一次 对于E

在ES2016中,我想知道这是否是在if语句中声明变量的最佳实践:

ECMA2016

在ES2016之前,使用var


使用ECMA2016,您不能在if块中声明新变量,然后在该块中使用otside。因此,您的变体看起来不错。

ES5中的最佳实践是

var x;
if (true) {
  x = 1
} else {
  x = 0
}
甚至

var x = true ? 1 : 0;
因为在功能范围的顶部定义一个var总是最清晰的(即使您还没有准备好分配任何东西给它),并且只定义一次


对于ES2015,您的示例是正确的:您应该在您希望使用的最高范围/块级别中定义x。

我认为您的意思是ES2015,同样也可以应用于
var
。嗯<代码>如果(真){var x=1;};控制台日志(x)很好用。我想IIiya的意思是你不能用let。在这种情况下,var仍然可以正常工作,尽管定义VarX可能仍然是一种最佳实践;在作用域的顶部,它意味着要被使用,即使您还没有准备好分配任何内容给它。没有在块中声明它的概念。使用ES6,人们应该避免使用var声明,并使用语义类似于许多块结构语言(特别是Java)的
let
const
声明变量。没有ECMAScript 2016规范,有已采用的ECMAScript 2015(ES6),还有正在审查的ECMAScript 2017。
var x;
if (true) {
  x = 1
} else {
  x = 0
}
var x = true ? 1 : 0;