es6中的let和const命令

96 阅读2分钟

image.png

1.let命令

在ES6中,新增了letconst命令,用来声明变量。用法和var类似。
let命令声明的变量,只有在let命令所在的代码块内有效。

{
      var a = 1;
      let b = 2;
}
       console.log(a);
       console.log(b);

03315b2731f4b26ea1bcb72fb3fed4c.png

varlet声明了两个变量,在代码块之外的地方调用这两个变量,var声明的变量返回了正确的值,let声明的变量报错,这表明,let声明的变量只有在它的代码块中才会生效。

let命令和var命令的区别

var命令会使声明的变量变量提升,变量可以在声明之前使用,值为underfined
let命令声明的变量必须在声明后使用,否则会报错
let命令不允许重复声明同一个变量,会报错。

let a=1;
let a=2;

2.const命令

const声明的常量是不可以更改的,一旦声明,常量的值就不可以改变。
const一旦声明变量,就不许初始化赋值,如果不赋值,就会报错。
const的作用域和let命令的相同:只在声明的块级作用域内有效。 const命令声明的常量也和let命令一样不提升,只在声明的位置后面使用。

const本质

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

const arr = [];
arr.push('hello'); //可以执行
a=['hi']; //会报错

上面代码中,常量是一个数组,这个数组本身是可写的,但是如果将另一个数组赋值给arr,就会报错。