JavaScript在一行上定义变量

本文探讨了JavaScript中一行定义变量的常见误解,指出这并不总是创建全局变量,具体取决于声明位置。通过example1和example2的示例,阐述了变量的作用域规则,强调在函数外部无法访问函数内部的局部变量,但特定情况下会变成全局变量并在浏览器控制台可查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

时常看到在些定义变量的“非常规”方法,特别是在一行上定义变量赋值的操作,有时看的很懵,所以特此去研究了一下此类定义。

var a = b = 3;

以前理解是:

var b = 3; 
var a =b;

其实这是一个错误的理解,真正的意义是:

b = 3; 
var a = b;

b其实是一个全局变量,a则不然,有可能是全局,也有可能是局部的变量,关键看它是在哪里声明的。

下面代码则可以解释此点:

example1
var a = b = 3;  // 其中a、b是在全局中声明的,所以它们是一个全局变量。
console.log(window.a);    // 3
console.log(window.b);    // 3
console.log(a);           // 3
console.log(b);           // 3
example2
function example() {
	var a = b = 3;
}
example();
console.log(a);   // Uncaugth ReferenceError: a is not defined
console.log(b);  // 3

我们知道,在js中只且只存在函数作用域,函数外部是不能访问到函数内部的变量,所以打印a的时候,因为a是不个example函数中的局部变量,所以在函数外部打印是获取不到里面a变量的,而b为什么能访问的到且得到结果3呢?那是因为此时的b变量变成了一个全局变量。

我们可能通过在浏览器控制台打印window,可以看到的b确实已经挂载到window上去了。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值