在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