2013-10-16 48 views

回答

62

JS變量沒有塊範圍,他們有「功能」範圍(或有時全局)。

聲明(但不是賦值)被「懸掛」到函數的頂部。

jshint警告你,你有兩個這樣的聲明 - 你的代碼就相當於:

var someVar; 
var someVar; // warning! 
if (something) { 
    someVar = true; 
} else { 
    someVar = false; 
} 
+0

謝謝,非常有幫助! – user2413333

8

你不應該把var聲明在這些地方。將var聲明放在if之前,然後將「someVar」設置爲一個值。

事實上,在這裏你不需要一個if聲明可言:

var someVar = !!(something); 

會做同樣的事情。 (的!雙應用程序確保「someVar」被設置爲truefalse,基於所述的something「感實性」。)

+1

啊多數民衆贊成很高興知道,謝謝 – user2413333

+7

'var someVar = Boolean(something);'做同樣的事情,可能更具可讀性。 –

18

這是由於吊裝。

在JavaScript中,無論你在哪裏定義與var一個新的變量,它移動到你在函數的頂部您的代碼產生在函數的頂部您如果塊以上的下列內容:。

var someVar; 
var someVar; 

這裏是一個教程解釋吊裝:

http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/

+0

謝謝,非常有幫助! – user2413333

+0

我注意到您的措詞從「可能由於」變爲「到期」,同時您添加了與我的答案相同的代碼... – Alnitak

+1

不確定您是否暗示某事,但如果您是,我沒有複製你的答案。 –