ES2015 let与块级作用域

本文介绍了ES2015引入的块级作用域概念及其重要性。通过对比var与let关键字,展示了let如何帮助开发者更好地控制变量作用域,避免变量污染。同时探讨了const关键字在声明不可变变量方面的应用。

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

一、块级作用域

在ES2015之前,ES中只有2种作用域:

  • 全局作用域
  • 函数作用域

ES2015新增了一种作用域——块级作用域,现在有3种了:

  • 全局作用域
  • 函数作用域
  • 块级作用域

: 代码中用花括号所包裹起来的范围

举两个常见的

if(true){
	console.log('花括号里面是块')
}
for(var i = 0; i<10; i++){
	console.log('花括号里面是块')
}

ES2015以前块是没有单独的作用域的,这就导致我们在块里面定义的成员,外部也可以访问到。

这在复杂代码中是很致命的:

if(true){
	var a = 0;	
}
console.log(a);//0

二、let

有了块级作用域后,我们就可以在代码中,通过一个新的关键字let去声明变量。

通过let声明的变量,它只能在所声明的这个中被访问到。
还是上面的例子,我们把var 改成 let

if(true){
	let a = 0;	
}
console.log(a);// a is not defind

应用场景:

特别适用于for循环,在过去如果我们需要for循环嵌套,往往需要声明2个不同的变量。

// 你是不是期待它打印9次呢?
	for (var i = 0; i < 3; i++) {
		for (var i = 0; i < 3; i++) {
			console.log(i);// 结果只打印3次  0 1 2 
		}
	}

我们把var 换成let

	for (var i = 0; i < 3; i++) {
		for (var i = 0; i < 3; i++) {
			console.log(i);// 得到期待结果打印9次  0 1 2 0 1 2 0 1 2
		}
	}

虽然let可以解决for循环中计数器重名的问题,但是不建议在for循环嵌套里面使用同名的计数器,不利于后期里面理解和维护代码。

三、const

const是在 let的基础上增加「只读」特性

const 所声明的成员不能被修改,只是说不允许在声明过后重新去指向一个新的内存地址,并不是说不允许修改恒量中的属性成员。

const obj = {}
obj.name = 'luyu' // 并没有修改obj指向的内存地址,它只是修改了这块内存空间的数据

// 如果obj = {} 那则会报错
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值