es6 let,const 展示性死区/没有变量提示(Temporal Dead Zone)

本文详细解析ES6中新增的let关键字,用于声明具有块级作用域的变量,避免变量污染。同时深入探讨const声明常量的特性,包括不可修改性与块级作用域,以及与let和var的区别。

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

let

ES6中新增的用于声明变量的关键字

let声明的变量只在所处的块级作用域有效

es6 新增了块级作用域

if(true){ // 块级作用域 
	let a = 2
}
console.log(a) // a is not defined

在业务逻辑比较复杂的时候,可防止内层变量覆盖外层变量

使用let声明的变量才具有块级作用域 var是没有的
if(true){ // 块级作用域 
	let a = 2
	var b = 2
}
console.log(b) // 2 
console.log(a) // a is not defined
防止循环变量变成全局变量
for(var i = 0; i < 2; i++){
}
console.log(i) //2

for(let i = 0; i < 2; i++){
}
console.log(i) //i is not defined 
不存在变量提升

因为没有变量提升 所以不能在声明之前使用
只能先声明在使用

console.log(a) // a is not defined
let a = 3;

在 es5中 变量提升

console.log(ff);//undefined
var ff = 'ff'

es6 访问不到ff

console.log(ff);//报错 ncaught ReferenceError: Cannot access 'ff' before initialization
let ff = 'ff'
//或 
//const ff

const

声明常量,常量就是值(内存地址)不能变化的量

具有块级作用域
if(true){
	const a = 1
}
console.log(a)// a is not defined
声明时必须赋值
const F; //Uncaught SyntaxError: Missing initializer in const declaration
// 声明常量时丢失了初始值
声明常量后,值不能修改

对应基本数据类型 不能修改

const f = 1
f = 2 // Uncaught TypeError: Assignment to constant variable. 不能更改此常量的值

对应复杂数据类型,不能直接修改,但可以修改属性

const obj = {name:"obj"}
obj.name = "gg"
console.log(obj)// {name: "gg"}
obj = [] // Uncaught TypeError: Identifier 'obj' has already been declared 标识符'obj'已经声明了

let const var 的区别

  1. 使用 var 声明的变量,其作用域为 该语句所在的函数内,且存在变量提示
  2. 使用 let 声明的变量,其作用域为 该语句所在的代码块内,不存在变量提示
  3. 使用 const 声明的是常量,在后面出现的代码中 不能在修改该常量的值
  4. 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值