ES6中var,let, const的区别

很明显这三者都是用来声明变量的,var我们最为熟悉,因为它是最常用的声明变量方法,但是在ES6里面,我们也可以用let和const来声明变量,下面我们来分析一下区别:

  • 首先在javascript中我们通常使用var会发生变量提升,即脚本开始运行时,变量已经存在了,但是没有值,所以会输出undefined;而let不会发生变量提升,这表示在声明它之前,变量是不存在的,这时如果用到它,就会抛出错误。
  • 其次var是函数级作用域,但是let是块级作用域.例:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function test() {
    var a = [];
    for (var i = 0;i < 10; i++) {
    a[i] = function() {
    console.log(i);
    }
    }
    }
    a[4](); //10

但是如果将var i=0换成let i=0;最后输出就是4.总的来说let的声明比var声明条件更高一点,更安全,更不至于变量外泄。

  • let不允许在相同作用域内,重复声明同一个变量,否则会报错.
  • const声明一个只读的常量。一旦声明,常量的值就不能改变,这是const最主要的一个特点。
    1
    2
    const a = 1;
    a = 2;

会报错.

  • const命令声明的常量也是不提升,只能在声明的位置后面使用。如果只const a然后console.log(a)会报错。
  • const声明的常量,也与let一样不可重复声明。
  • 对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量必须非常小心。
    1
    2
    3
    4
    const t = {};
    t.p = 1;
    console.log(t.p); // 1
    t = {}; // 报错
坚持原创技术分享,您的支持将鼓励我继续创作!