我有這樣的代碼:爲什麼Jshint在這個if語句中說「variable already defined」?
if (something is true) {
var someVar = true;
} else {
var someVar = false;
}
JsHint是說,「someVar已經定義」關於else語句的一部分。爲什麼是這個,我該如何解決它?
感謝
我有這樣的代碼:爲什麼Jshint在這個if語句中說「variable already defined」?
if (something is true) {
var someVar = true;
} else {
var someVar = false;
}
JsHint是說,「someVar已經定義」關於else語句的一部分。爲什麼是這個,我該如何解決它?
感謝
JS變量沒有塊範圍,他們有「功能」範圍(或有時全局)。
聲明(但不是賦值)被「懸掛」到函數的頂部。
jshint警告你,你有兩個這樣的聲明 - 你的代碼就相當於:
var someVar;
var someVar; // warning!
if (something) {
someVar = true;
} else {
someVar = false;
}
謝謝,非常有幫助! – user2413333
你不應該把var
聲明在這些地方。將var
聲明放在if
之前,然後將「someVar」設置爲一個值。
事實上,在這裏你不需要一個if
聲明可言:
var someVar = !!(something);
會做同樣的事情。 (的!
雙應用程序確保「someVar」被設置爲true
或false
,基於所述的something
「感實性」。)
啊多數民衆贊成很高興知道,謝謝 – user2413333
'var someVar = Boolean(something);'做同樣的事情,可能更具可讀性。 –
這是由於吊裝。
在JavaScript中,無論你在哪裏定義與var
一個新的變量,它移動到你在函數的頂部您的代碼產生在函數的頂部您如果塊以上的下列內容:。
var someVar;
var someVar;
這裏是一個教程解釋吊裝:
http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/
謝謝,非常有幫助! – user2413333
我注意到您的措詞從「可能由於」變爲「到期」,同時您添加了與我的答案相同的代碼... – Alnitak
不確定您是否暗示某事,但如果您是,我沒有複製你的答案。 –
@thefourtheye與ES6,塊作用域現在使用JavaScript中存在'{}'和'let' –