(function(){
var a = b = 3;
})();
document.writeln("a undefined? " + (typeof a === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof b === 'undefined'));
&#13;
javascript的另一个有趣的事情,有些身体请让我帮助理解这里发生了什么。
a和b都应该被定义。但我错了
答案 0 :(得分:4)
b
已定义,因为您从未声明b
,因此它假定它指的是window.b
。
a
未定义,因为它仅在匿名函数内定义。
如果您将代码更改为
(function(){
var a, b;
a = b = 3;
})();
然后您可以清楚地看到a
和b
都未在函数外定义。
答案 1 :(得分:2)
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'));
&#13;
答案 2 :(得分:1)
a未定义,因为您在函数内定义它。因此,变量范围仅限于函数体。
b的定义是因为你没有使用&#39; var&#39;来定义它,这意味着它被隐式分配给全局范围,这意味着你可以在函数体外看到它。