阅读 101

对 let 和 const 的理解

let 和 const

  • 作用域的概念

    全局作用域,函数作用域,块作用域

  • 如何使用let和const

  1. 在ES6里加入严格模式
  2. 'use strice'; //整个js文件都是严格模式下执行的
  3. 引入了块作域的概念(如何区分块作域 - 用{}大括号包起来就是块作域)

let 定义

  • 有块作域
  • 不能重复使用let定义同一个变量名
使用的是块级作用域,变量声明只在代码块内有效
复制代码
function test () {
    for(let i =1;i<3;i++){
      console.log(i) 
    }
    
    console.log(i)//有作用域这个打印i 是会报错的
    
    let a =1
    //let a =2 // 语法错误
}

test ()
复制代码

const

  • 有块作域
  • const声明的常量,也和let一样不可重复声明。

function last (){

const PI = 3.1415926
const k = { //定义常量对象 可以为添加属性
    a= 1
}
k.b =3
console.log(PI,K)
复制代码

}

last()

const声明的常量也不提升,同时存在暂时性死区,只能在声明的位置后面使用
复制代码

if (true) {
console.log(i); // 报错
const i = 5;
}

将一个数组声明为常量,该数组本身是可写的,但是若将另一个数组赋值给该数组,会报错
复制代码

const arr = [];
arr.push(1);
arr = [1,2,3,4]; // 报错

对于复合类型的常量,常量名不指向数据,而是指向数据所在的地址。const命令只是保证常量名指向的地址不变,并不保证该地址的数据不变,也就是说,将对象常量指向另一个地址会报错,但对象本身是可变的,可以为其添加,修改属性,因此将一个对象声明为常量必须十分小心
复制代码