javascript中的单行分配

时间:2016-02-11 09:59:49

标签: javascript



(function(){
  var a = b = 3;
})();

document.writeln("a undefined? " + (typeof a === 'undefined'));
document.writeln('<br/>')
document.writeln("b undefined? " + (typeof b === 'undefined'));
&#13;
&#13;
&#13;

javascript的另一个有趣的事情,有些身体请让我帮助理解这里发生了什么。

a和b都应该被定义。但我错了

3 个答案:

答案 0 :(得分:4)

b已定义,因为您从未声明b,因此它假定它指的是window.b

a未定义,因为它仅在匿名函数内定义。

如果您将代码更改为

(function(){
    var a, b;
    a = b = 3;
})();

然后您可以清楚地看到ab都未在函数外定义。

答案 1 :(得分:2)

  

a成为局部变量,因为它被定义为var a,但b是全局的(如果在浏览器中执行,则在窗口的上下文中),因为它是未在var范围之外使用function声明,而是undefined

如果从该语句中删除var,则两个变量都将变为global

参考此示例:

&#13;
&#13;
(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;
&#13;
&#13;

答案 2 :(得分:1)

a未定义,因为您在函数内定义它。因此,变量范围仅限于函数体。

b的定义是因为你没有使用&#39; var&#39;来定义它,这意味着它被隐式分配给全局范围,这意味着你可以在函数体外看到它。