美文网首页
ES6的let和const命令

ES6的let和const命令

作者: walker_10086 | 来源:发表于2019-01-04 13:30 被阅读0次

    let命令
    1、let用法类似var,用于声明变量。但是所声明的变量只在let命令所在的代码块内有效。

    2、不存在变量提升,所以变量一定要在声明后使用,否则报错。

    3、暂时性死区。只要块级作用域内存在let命令,它所声明的变量就“绑定”在这个区域,不再受外部的影响。比如 :

    var a = 1;

    if(true){

    a = 2; //报错

    ​let a;

    }​

    ​上面的代码中存在全局变量a,但是块级作用域中let又声明了一个局部变量a,导致后者绑定这个块级作用域,所以在let声明变量前,对a赋值会报错。

    4、不允许重复声明。let不允许在相同的作用域内声明同一变量。

    function​( ){

    let a = 1;

    var a =2;

    } //报错​

    const命令​
    1、const用来声明常量。一旦声明其值不能改变。这就意味着const一旦声明常量,就必须初始化,不能留到以后赋值。

    2、与let命令相同,只在声明所在的块级作用域内有效。

    3、const命令声明的变量也不提升,同样存在暂时性死区,只能在声明后使用。同样不可重复声明变量。

    4、对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只是指向的地址不变,并不保证改地址的数据不变,所以将一个地址声明为变量需要非常小心。

    const foo = {};

    foo.prop = 123;

    foo= { }; ​// 报错

    上面的代码,常量foo存储的是一个地址,指向一个对象。不可变的只是这个地址,即不能把foo指向另一个地址,但对象本身是可变的,所以依然可以为其添加属性。如果想使对象不可变,可以将对象冻结,使用object.freeze方法。

    5、跨模块常量的写法。

    //constants.js模块

    export const A = 1;

    export const B = 2;

    export const C = 3;

    //text1.js模块

    import​ * as constants from './constants';

    console.log(constants.A ); // 1​

    console.log(constants.B ); // 2

    //text2.js模块

    import​ {A, B} from './constants';

    console.log(constants.A ); // 1​

    console.log(constants.B ); // 2

    相关文章

      网友评论

          本文标题:ES6的let和const命令

          本文链接:https://www.haomeiwen.com/subject/vybhrqtx.html