JavaScript 中的单行赋值



(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;
})();

然后,您可以清楚地看到ab都没有在函数外部定义。

a成为局部变量,因为它被定义为var ab是全局的(如果在浏览器中执行,则在窗口上下文下),因为它不是使用 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' 定义它,这意味着它被隐式分配给全局范围,这意味着您可以在函数体外部看到它。

最新更新