let和const声明的区别

let 命令

  1. let所声明的变量只在其所在的代码块内有效,比如for循环的计数器就很适合使用let命令。
  2. 不存在变量提升
  3. 暂时性死区:使用let命令声明变量完成之前,该变量都是不可用的。
  4. 在相同作用域中不允许重复声明同一个变量

const 命令

let与const都是只在声明所在的块级作用域内有效。

  1. 声明一个只读常量,一旦声明,常量的值就不能改变。
  2. 实际上const保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
  • 对于简单类型的数据,值就保存在变量指向的那个内存地址。
  • 而对于复合类型的数据,变量指向的内存地址,保存的只是一个指针,const保证这个指针固定,而它指向的数据结构是不能控制的。 举例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    const a;  // 报错,一旦声明变量就应该立即赋值

    const b = 2;
    b = 3 // 报错,声明后不能重新赋值

    const array1 = [];
    array1 = [1,2,3] // 报错,数组是复合类型,指向的地址不能发生改变,应始终指向[]所在的地址,而[1,2,3]与[]不是同一个地址

    const array2 = [];
    array2[0] = 1
    array2[1] = 2
    array2[2] = 3 // 不报错,array2指向的地址不变,改变的只是其内部数据