2012-08-12 81 views
3

我想定義一個變量爲默認值,如果尚未定義,但發現一個奇怪的問題。Javascript變量範圍undefined

var x = x || {}作品而x = x || {}給出了一個錯誤。

螢火蟲輸出。

>>> a = a || {}; 
ReferenceError: a is not defined 
[Break On This Error] 
a = a || {}; 
with(_... {}; }; (line 2) 
>>> var b = b || {}; 
undefined 

>>> b; 
Object {} 
>>> a; 
ReferenceError: a is not defined 
[Break On This Error] 

爲什麼第一個出現錯誤,而第二個似乎經歷了。

+1

http://stackoverflow.com/questions/1470488/difference-between-using-var-and-not-using-var-in-javascript的副本? – 2012-08-12 16:56:17

+0

這個答案將幫助你http://stackoverflow.com/a/1470494/205585 – 2012-08-12 16:56:53

+1

有這個真正的重複,這些不是其中之一。 – Esailija 2012-08-12 17:00:24

回答

0

只需使用var。除了舊IE版本的bug之外,添加var會爲您節省一個錯誤信息,並明確表明您不假定它在其他地方聲明。

在這些舊版本的IE,

x = (typeof x !== 'undefined' && x) || {} 

一個typeof檢查防止 「未聲明變量」 錯誤。

+3

如果你要舊的IE瀏覽器,那麼它不會爲這個bug http://jsfiddle.net/NBg7j/工作(在IE8兼容模式下出錯) – Esailija 2012-08-12 17:02:14

+0

@Esailija,好點。我假設某處有一個'var',並且當我在談論的IE錯誤導致在兩個'