let 、 const 与var

本文详细解析了JavaScript中let与var的区别,重点强调了let具有块级作用域而var没有这一特性。同时,文章介绍了const常量的正确使用方式,包括不可修改性和必须初始化的规则。

let 与 var 的区别

let 可以看做是更完美的var,
主要区别是let有块级作用域,var 没有块级作用。

块级作用域
JS中使用 var 来声明一个变量时,变量的作用域主要是和函数的定义有关。
如 if / for 语句的块定义来说是没有作用域的,往往需要函数(闭包)来解决出现的问题。

举例如下

var 定义变量在for语句中没有块级作用域,需要加上立即执行函数,使用函数作用域来解决问题。(如果不使用函数,假如有5个按钮,i 的值会由于循环变成 5,无论点击哪个按钮都只弹出点击了第5个按钮)

// 监听按钮的点击 (点击哪个按钮弹出点击了哪个按钮的提示框)
var btns = document.getElementsByTagName('button');
for (var i = 0; i < btns.length; i++) {
	(function (i) {
	btns[i].onclick = function () {
		alert('点击了' + i + '个按钮');
	}
})(i)
}

使用 let 声明变量就没有问题

var btns = document.getElementsByTagName('button');
for (let i = 0; i < btns.length; i++) {	
	btns[i].onclick = function () {
		alert('点击了' + i + '个按钮');
	}
}

const常量 的使用

1.const 定义后,指针不能修改
例:

const a = 20;
a = 30; // 错误, 不可以修改

2.const 必须要初始化要赋值

const name; //错误: const修饰的标识符必须赋值

但是如果const定义一个对象,对象的属性是可以修改的

### 变量作用域 `var` 关键字声明的变量具有函数作用域或全局作用域,这意味着如果在函数内部没有使用 `var` 声明变量,则会创建一个全局变量。而 `let` 和 `const` 都具有块级作用域,这使得它们更适合于循环和条件语句中的变量声明,因为它们不会泄露到外部作用域[^1]。 ```javascript if (true) { var x = 5; let y = 6; } console.log(x); // 5 console.log(y); // ReferenceError: y is not defined ``` ### 变量提升 使用 `var` 声明的变量会被提升到其作用域的顶部,并且初始化为 `undefined`。相比之下,`let` 和 `const` 虽然也会被提升,但不会被初始化,因此访问这些变量会导致引用错误,直到它们被实际执行流中的声明所覆盖(暂时性死区)[^3]。 ```javascript console.log(a); // undefined var a = 10; console.log(b); // ReferenceError let b = 20; ``` ### 重复声明 `var` 允许在同一作用域内重复声明同一个变量,而 `let` 和 `const` 则不允许这样做。尝试这样做会导致语法错误。 ```javascript var c = 1; var c = 2; // 合法 let d = 3; let d = 4; // SyntaxError: Identifier 'd' has already been declared ``` ### 不可变性 `const` 声明的变量必须立即初始化,并且一旦赋值后就不能更改其绑定的对象。然而,如果是对象或数组,虽然不能改变引用本身,但是可以修改对象属性或数组的内容[^4]。 ```javascript const e = { name: "Alice" }; e.name = "Bob"; // 合法 e = { name: "Charlie" }; // TypeError: Assignment to constant variable. ``` ### 使用建议 由于 `let` 和 `const` 提供了更好的作用域控制和避免了一些常见的编程陷阱,如变量提升带来的问题,因此推荐优先使用 `const`,只有当需要重新赋值时才使用 `let`。不再推荐使用 `var` 来声明变量[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值