为什么在 var a=b=3 中 a 是未定义的而 b 是 3?

新手上路,请多包涵

在下面的代码中,我预计 ab 都是 3 。但是, aundefinedb3 为什么?

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

console.log(typeof a);//"undefined"
console.log(b);//3

原文由 Hans Qi 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 875
2 个回答

这里的问题是大多数开发人员都将语句 var a = b = 3; 理解为以下内容的简写:

 var b = 3;
var a = b;

但实际上,var a = b = 3;实际上是以下内容的简写:

 b = 3;
var a = b;

因此,b 最终成为一个全局变量(因为它前面没有 var 关键字)并且仍然在范围内,即使在封闭函数之外。

a 未定义的原因是 a 是该自执行匿名函数的局部变量

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

原文由 user2466202 发布,翻译遵循 CC BY-SA 3.0 许可协议

var a=b=3

是相同的:

 var a = (b = 3)

var 声明仅适用于 a ,而不适用于 b 。您可以在 此处 查看 var 语句的语法。

因此 a 将在局部范围内定义,而 b 将在全局范围内定义。内部函数 ab 都是 3,但在函数返回注册的局部变量( a )后被删除。由于 b 是在全局范围内定义的,因此不会被删除。

原文由 Piotr Dabkowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题