Javascript ES6中的let const和var的区别

2019-05-07  本文已影响0人  学不动了Zzz

var

直接定义到window上

var a = 1
window.a // 1

声明提升(预编译)

console.log(a) // undefined
var a = 1

let

声明不提升

console.log(a) // 报错 Uncaught ReferenceError: a is not defined
let a = 1

暂时性死区:如果某个代码块中有let指令,外部有名称相同的变量,两者互不影响

var a = 1
if (true) {
  var a = 2
  console.log(a) // 2
}
console.log(a) // 2
if (true) {
  let a = 3
  console.log(a) // 3
}
console.log(a) // 2

同一代码块中不可重复声明

let a = 1
let a = 2 // Identifier 'a' has already been declared

const

声明不提升,暂时性死区,同一代码块中不可重复声明(同let)
const声明一个只读的常量,声明的时候必须初始化赋值,一旦声明,常量的值就不能改变

const a = 1
a = 2 // Assignment to constant variable

const其实保证的不是变量不可改变,而是变量指向的内存地址所保存的数据不可改变
基本数据类型: 值就保存在变量指向的内存地址,等同于常量。不能改变值。
复杂数据类型: 该类型变量名不指向数据,而是指向数据所在的地址,const只保证变量名指向的地址不变,并不保证改地址的数据不变,因此可以对该地址的属性值进行修改,但是不能改变地址指向。

const a = {x: 1}
a.x = 2
console.log(a) // {x: 2}
a = {x: 3} // Assignment to constant variable
上一篇 下一篇

猜你喜欢

热点阅读