let和const命令

let和var的一些区别

  1. var存在变量提升,let不存在变量提升
console.log(a)    //undefined
console.log(b)    //"ReferenceError: a is not defined
var a=1
let b=2

暂时性死区(temporal dead zone,简称 TDZ)

a=2    //"ReferenceError: a is not defined
let a
console.log(typeof keke)    //undefined
console.log(typeof a)    //"ReferenceError: a is not defined
let a

暂时性死区的本质就是,只要一进入当前作用域,所要使用的变量就已经存在了,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用该变量。

  1. let不可以重复声明
let a=1
let a=2  //"SyntaxError: Identifier 'a' has already been declared
  1. 块级作用域
{
    var a=1
}
console.log(a)    //1
{
    let b=1
}
console.log(b)    //"ReferenceError: b is not defined

const用法与let一致,区别在于const声明只读常量

const A=1
A=2    //"TypeError: Assignment to constant variable.

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的

const A={}
A.a=1
console.log(A)    //Object {a: 1}
A=['a','b']    //"TypeError: Assignment to constant variable.

你可能感兴趣的:(let和const命令)