在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
在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
使用ECMA2016,您不能在if块中声明新变量,然后使用该块的另一个。所以,你的变体看起来不错。
呃? 'if(true){var x = 1; }; console.log(x);'工作得很好。 –
我认为IIiya意味着你不能那样做。在这种情况下,var仍然可以正常工作,尽管定义var x仍然是最佳做法。即使你还没有准备好分配任何东西,它也可以用在它的使用范围的顶部。 – Dtipson
'var'作用于该函数。没有在该块中声明它的概念。使用ES6,人们应该避免使用var声明并使用'let'或'const'声明具有与许多块结构语言(特别是Java)类似的语义的变量。没有ECMAScript2016规范,已经采用了ECMAScript2015(ES6)和正在审查的ECMAScript2017。 – John
在ES5最好的做法真的会
var x;
if (true) {
x = 1
} else {
x = 0
}
甚至
var x = true ? 1 : 0;
因为它总是清晰的在功能范围(即使你不是顶部定义一个变种准备给它分配任何东西),也只能定义一次。
随着ES2015你的例子是正确的:你应该定义在最高范围/块级X你想让它在使用
我认为你的意思ES2015还,同样可以用'var'的应用好。 – thefourtheye