2016-01-24 50 views
0

在ES2016,我想知道,如果这个声明的变量是最好的做法是在声明一个变量,如果声明:的if语句(在ES2016好的做法)

ECMA2016

let x = 1 
if (false) { 
    x = 0 
} 
console.log(x) // 1 

ES2016之前,使用VAR

if (true) { 
    var x = 1 
} else { 
    var x = 0 
} 
console.log(x) // 1 
+0

我认为你的意思ES2015还,同样可以用'var'的应用好。 – thefourtheye

回答

-1

使用ECMA2016,您不能在if块中声明新变量,然后使用该块的另一个。所以,你的变体看起来不错。

+0

呃? 'if(true){var x = 1; }; console.log(x);'工作得很好。 –

+0

我认为IIiya意味着你不能那样做。在这种情况下,var仍然可以正常工作,尽管定义var x仍然是最佳做法。即使你还没有准备好分配任何东西,它也可以用在它的使用范围的顶部。 – Dtipson

+0

'var'作用于该函数。没有在该块中声明它的概念。使用ES6,人们应该避免使用var声明并使用'let'或'const'声明具有与许多块结构语言(特别是Java)类似的语义的变量。没有ECMAScript2016规范,已经采用了ECMAScript2015(ES6)和正在审查的ECMAScript2017。 – John

1

在ES5最好的做法真的会

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

甚至

var x = true ? 1 : 0; 

因为它总是清晰的在功能范围(即使你不是顶部定义一个变种准备给它分配任何东西),也只能定义一次。

随着ES2015你的例子是正确的:你应该定义在最高范围/块级X你想让它在使用