2012-08-12 84 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错误导致在两个'