ES6中的let和const ,块级作用域——暂时性死区问题

本文探讨了ES6中的let和const声明,它们引入了块级作用域,解决了变量提升和全局污染等问题。let允许变量在块级作用域内有效并可重新赋值,而const则声明不可更改的常量。块级作用域通过避免变量提升和防止在for循环中污染全局变量,提高了代码的可控性。同时,介绍了暂时性死区的概念,即在声明之前使用let和const会导致错误。

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

let const 都属于 es6 的内容

let(变量)

声明的变量可以改变,值和类型都可以改变

  • let声明 的变量 没有变量提升; 而且他也不是 window 上的一个属性

  • 不能重复声明 ; 重复声明会报错; 可以重新赋值

  • let命令用来声明变量,他的作用类似于var,但是所声明的变量只在let命令所在的代码块内部有效

// var a =12;
    // b = 13
    // let a = 12;
    // a = 13;

for()循环的计数器,适合使用let命令;

for(let i =0;i<5;i++){

}
console.log(i);//ReferenceError :i is not defined


const(常量)

声明一个只读的常量,一旦声明,常量的值不能修改;
所谓常量就是物理指针不可以更改的变量。

  • const声明 的常量 没有变量提升; 而且他也不是 window 上的一个属性

  • 不能重复声明 ; 重复声明会报错; 可以重新赋值

  • const命令用来声明常量,所声明的常量只在const命令所在的代码块内部有效;

const 除了不能改变物理指针的特性,其他特性和 let 一样。
当声明普通数据类型的时候,那么一但声明了,就不可以再改变。

const a = 1;

a = 2;  //Uncaught TypeError: Assignment to constant variable.改变之后报错
块级作用域

es6 块级作用域 {} for if while
块级作用域 :只跟 let 或者 const 声明的变量起作用;对于 var 没有块级作用域的限制

为什么需要块级作用域
ES5中只有全局作用域和函数作用域,会带来很多问题

1、变量提升导致函数作用域里面变量影响调用外部变量(内层变量覆盖外层变量)


var i = 5;
function sum() {
	console.log(i);
	if (true) {
		var i = 6;
	}
}
sum();  // undefined

2、 for循环中用来计数的 变量泄露为全局变量,影响全局变量


for (var i = 0; i < 10; i++) {  
    	console.log(i);  
}  
console.log(i);//10

所以为了解决以上问题ES6推出了块级作用域,使用let或const命令进行变量声明,只在let声明的代码块内有效,影响不了调用外部变量

var i = 5;
function sum() {
	console.log(i);
	if (true) {
		let i = 6;
	}
}
sum();  // 5

var i = 5;
function sum() {
	console.log(i);
	if (true) {
		const i = 6;
	}
}
sum(); //5

也解决了for循环中变量泄露为全局变量的问题

for (let i = 0; i < 10; i++) {  
    	console.log(i);  
}  
console.log(i);//undefined
在这里插入代码片
暂时性死区

用var 声明过的变量 ,会有变量提升,给一个默认值是undefined
用let 和 const 声明的变量, 不会进行变量提升,但是他也会对里边的带let 和 const 的变量进行预览,这时 ,浏览器不会再往上级作用域查找相应变量

var a =13;
 
    function f1() {
        console.log(b);
        console.log(a);
        let a = 15;
        var b = 10;
        console.log(b,a);
    }
    f1();//报错函数无法执行

因为暂时性死区的影响,使console.log(a)无法调用上级作用域,对let和const进行预览,但是let和const没有变量提升,而且按代码执行顺序,也调用不到下面let a的变量,所以a没有定义过,报错,暂时性死区会造成函数无法执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值