ES6 let const

87 阅读1分钟

let vs const

let 不存在变量提升

image.png

let 不允许重复声明

  • (不论当前上下文中,基于何种方式声明过这个变量,都不允许声明)

image.png

在全局山下文中

  • 基于 var/function 声明的变量,是给window(GO)设置的全局属性

  • 基于 let/const 声明的变量是放在 VO(G)中,和GO没有任何的关系

image.png

let 会产生块级上下文

image.png

let 的暂时性死区问题

  • 暂时性死区:声明之前使用

image.png

const 对象的属性可以修改吗? **

const 只能保证指针固定不变的,指向的数据结构属性,无法控制是否变化的

  • 声明一个不可修改的常量,且必须在声明的同时初始化值

  • 通过数组的索引值或者数组方法对数组进行的修改是被允许的,但是不允许对常量直接赋值

  • 对象也是同理

const arr = [1,2,3,4,5]
arr[0] = 2			// 合法
arr.push(6)			// 合法
console.log(arr)	//[2,2,3,4,5,6]
arr = [1,2,3]		// 错误
const obj = {name:'frank', age=18}
obj.age = 19 		// 合法
obj.weight = 100	// 合法
console.log(obj)	// {name:'frank',age=19,weight=100}
obj = {name:'lisa'}	// 错误

let 与 var

  • 声明提升 => 先上车后买票
console.log(name);
var name = "深爱楚长风"// undefined
  • 变量覆盖 => 套牌车
var obj = '对象'
var obj = '新对象'
console.log(obj)
  • var没有块级作用域 => 红杏出墙
function fn2(){
    for(var i = 0; i < 5; i++){

    }   
    console.log(i)
}
fn2();
// 5 undefined

let name2 = "大郎喝药了"
// console.log(name2)

let name3 = "潘金莲"
// let name3 = "西门庆"
function fn2(){
    for(let i = 0; i < 5; i++){
      //  console.log(i)
    }   
//    console.log(i)
}
fn2()
// 0 1 2 3 4

let name2 = "大郎喝药了"
// console.log(name2)

let name3 = "潘金莲"
// let name3 = "西门庆"