var与let的区别

本文详细介绍了JavaScript中的var、let和const声明的变量作用域。var声明的变量具有函数作用域,存在变量提升现象;let则引入了块级作用域,不存在变量提升,并有暂时性死区的概念;const用于声明不可变的常量,其引用不可变但值可变。通过实例解析,帮助理解这些概念的区别和应用。
摘要由CSDN通过智能技术生成

目录

var 声明的作用域

var 声明提升

let 声明的作用域

let 暂时性die区


var 声明的作用域

function test() {
    var message = "hi";
}
test();
console.log(message);

message 变量是在函数内部又 var 定义的,被解释为一个局部变量,在函数执行完后,在栈区pop,所以报错。

function test() {
    message = "hi";
}
test();
console.log(message);

message 变量被解释为一个全局变量,在函数执行后,变量不会被销毁,所以为true。

var 声明提升

function foo() {
    console.log(age);
    var age = 26;
}
foo();

以上代码价等于

function foo() {
    var age;
    console.log(age);
    age = 26;
}
foo();

所谓提升,就是把所有变量声明都拉到函数作用域顶部,所以不会报错。

let 声明的作用域

let 与 var 最大区别就是 let 是块级作用域,而 var 是函数作用域。

function test() {
    for (var t = 0; t < 3; t++) {
		console.log(t);
	}
	console.log(t);
}
test();

如果把以上代码的 var 换成 let,那么最后一个 console.log(t) 就会报错。

而 let 也不能重用同一变量名,这也会报错。

在不同的块中,let会被解释成不同的变量。

function test() {
	let t = 0;
	for (let t = 0; t < 3; t++) {
	    console.log(t);
	}
	console.log(t);
}
test();

以上代码会输出 0 1 2 0 的4个数字,最后一个数字说明此let非彼let。

let 暂时性die区

let 与 var 另一个区别在于,let 不会在作用域中被提升,也就是不会被拉到函数顶部。

console.log(age);
var age;
console.log(test);
let test;

第一个没报错,第二个报错了。这说明let没提升,而var提升了!

刚学,分享一下,感觉不难,就是有点繁琐。

const 关键字

与 let 行为基本相同,不过用 const 声明的不能更改引用,但是可以更改引用里的值

比如 const a = { b: 1 }, a = { c: 1 } // Error ,a.b = 3 // 正确

南无阿弥陀佛,祝你吉祥!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值