es6从零学习(一)let 和 const 命令

时间:2023-03-09 18:38:28
es6从零学习(一)let 和 const 命令

es6从零学习(一):let 和 const 命令

一:let 变量

1、块级作用域{}:let只在自己的块级作用域内有效。

for(let i =0;i<3;i++) {
console.log(i)
}
console.log(i)

以上代码输出0,1,2之后,输出了i is not defined。因为i是let定义的,只能在自己的块级作用域读取到。

for(var i =0;i<3;i++) {
console.log(i)
}
console.log(i)

以上代码输出0,1,2,3。

2、let定义的变量不要重复定义,会报错。

let a = 1
let a = 3

  

二:const:常量

1、声明必须定义值

const num

此时会报错

2、不能重复定义

const num = 2
const num = 4

此时会报错  

3、const定义的对象,可以修改对象的值

 const k = {
a: 1
}
k.a = 2
k.b = 2
console.log(k)

此时输出的值为{a:2,b:2}

原因:因为const定义的是k,而k相当于一个指针,指向对象值,对象值修改和k怎么定义没有关系。

4、const定义的数组,可以修改数组的值

const k = [1,2,3]
k[0] = 2
console.log(k)

此时输出的值为[2,2,3]。原因与上面一致

总结:

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指针,const只能保证这个指针是固定的,至于它指向的数据结构是不是可变的,就完全不能控制了。因此,将一个对象声明为常量必须非常小心。

三:let和const的共同点:

1、一旦声明变量,就必须立即初始化

2、只在声明所在的块级作用域内有效

3、声明的常量不提升,存在暂时性死区,只能在声明的位置后面使用。(声明必须在使用之前)

4、不可重复声明