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

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. es6 let,const 展示性死区/没有变量提示(Temporal Dead Zone)_第1张图片

你可能感兴趣的:(es6)