在下面的代码中,我预计 a
和 b
都是 3
。但是, a
是 undefined
和 b
是 3
为什么?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
原文由 Hans Qi 发布,翻译遵循 CC BY-SA 4.0 许可协议
在下面的代码中,我预计 a
和 b
都是 3
。但是, a
是 undefined
和 b
是 3
为什么?
(function(){
var a = b = 3;
})();
console.log(typeof a);//"undefined"
console.log(b);//3
原文由 Hans Qi 发布,翻译遵循 CC BY-SA 4.0 许可协议
var a=b=3
是相同的:
var a = (b = 3)
和 var
声明仅适用于 a
,而不适用于 b
。您可以在 此处 查看 var
语句的语法。
因此 a
将在局部范围内定义,而 b
将在全局范围内定义。内部函数 a
和 b
都是 3,但在函数返回注册的局部变量( a
)后被删除。由于 b
是在全局范围内定义的,因此不会被删除。
原文由 Piotr Dabkowski 发布,翻译遵循 CC BY-SA 3.0 许可协议
13 回答13k 阅读
7 回答2.2k 阅读
3 回答1.3k 阅读✓ 已解决
6 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
6 回答1.1k 阅读
这里的问题是大多数开发人员都将语句
var a = b = 3;
理解为以下内容的简写:但实际上,var a = b = 3;实际上是以下内容的简写:
因此,b 最终成为一个全局变量(因为它前面没有 var 关键字)并且仍然在范围内,即使在封闭函数之外。
a 未定义的原因是 a 是该自执行匿名函数的局部变量