(function(){
var a = b = 3;
})();
document.writeln("a undefined? " + (typeof a === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof b === 'undefined'));
JavaScript的另一个有趣的事情,请一些机构让我帮助了解这里会发生什么。
A和B都应该被定义。 但我错了
b
是因为您从未声明过b
,因此它假定它指的是window.b
。
未定义a
,因为它仅在匿名函数中定义。
如果将代码更改为
(function(){
var a, b;
a = b = 3;
})();
然后,您可以清楚地看到a
和b
都没有在函数外部定义。
a
成为局部变量,因为它被定义为var a
但b
是全局的(如果在浏览器中执行,则在窗口上下文下),因为它不是使用var
声明的,因此超出了function
范围,它是undefined
如果从该语句中删除var
,则两个变量都将变为global
请参考此示例:
(function() {
a = b = 3;
var c = 3,
d = 4;
})();
document.writeln("a undefined? " + (typeof a === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof b === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof c === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof d === 'undefined'));
a 是未定义的,因为你在函数中定义了它。因此,变量范围仅限于函数体。
定义 b 是因为您没有使用 'var' 定义它,这意味着它被隐式分配给全局范围,这意味着您可以在函数体外部看到它。