Javascript变量作用域未定义
如果尚未定义但发现一个奇怪的问题,我想将变量定义为默认值Javascript变量作用域未定义,javascript,Javascript,如果尚未定义但发现一个奇怪的问题,我想将变量定义为默认值 var x=x |{}有效,而x=x |{}给出了一个错误 firebug的输出 >>> a = a || {}; ReferenceError: a is not defined [Break On This Error] a = a || {}; with(_... {}; }; (line 2) >>> var b = b || {}; undefined >>> b;
var x=x |{}
有效,而x=x |{}
给出了一个错误
firebug的输出
>>> 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]
为什么第一个给出错误,而第二个似乎通过。只需使用
var
。除了旧IE版本上的一个bug之外,添加var
将为您保存一条错误消息,并明确表明您没有假设它在其他地方声明
在那些旧版本的IE上
x = (typeof x !== 'undefined' && x) || {}
typeof
检查可防止出现“未声明变量”错误。重复的?此答案将帮助您了解此问题是否存在真正的重复项,这些重复项不是其中之一。由于,b
的定义被提升到范围的顶部,以便在赋值操作发生之前将b
定义为局部变量。对于a
,情况并非如此,因为它没有使用var
定义。吊装演示(@apsillers):注意z
从未定义过,但是zz
在以后定义时,会在该检查中返回uh-oh-zz
。如果您使用的是旧IE,那么它对该错误无效(在IE8兼容模式下出现错误)@Esailija,说得好。我假设某个地方有一个var
,我所说的IE bug会导致当两个
元素中有var
时,重新初始化为undefined
。如果id/名称重叠,那么必须在某个地方有一个var
。第一个是否会返回true
tox
?@JaredFarrish,no.(a和b)
在a
为真或a
为假时返回b
。(a | | b)
在a
为假或a
为假时返回b
。@Jared