美文网首页
ES6之let与const

ES6之let与const

作者: lionlsc | 来源:发表于2018-10-20 23:17 被阅读0次

    在ES6中新增加了let和const,现在来看看他们的基本用法。

    let:

    1:不存在变量提升

        var命令会发生“变量提升”现象,即变量可以先使用,再声明,值为undefined。这种现象多少是有点奇怪的,按照一般的逻辑,变量应该在声明语句之后才可使用。

        为了纠正这种现象,let命令改变了语法行为,他所声明的变量一定要声明之后使用,否则直接报错。下面来看例子

    eg:

                //var情况

                console.log(foo);  //控制台会输出undefined

                var foo=2;

                //let情况

                console.log(bar);  //控制台直接报错

                let bar=2;

    2:暂时性死区

          用let定义的变量,和它所在的作用域相绑定在一起,不再受外部的影响。

    3:不允许重复声明

          let不允许在相同作用域内重复声明同一个变量

    const:

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

    eg:

    const foo={};    //声明一个空对象

    foo.prop=123;  //给这个用const声明的对象增加prop属性

    console.log(foo.prop);  //控制台不报错,能正常输出123

    let A={};  //再用let定义一个新数组

    foo=A;   //控制台报错,foo的地址不能被修改

    如果想要将对象冻结,应该使用下述语句

    const foo=Object.freeze({});

    除了将对象本身冻结,对象的属性也应该冻结

    let constantize=(obj)=>{

                    Object.freeze(obj);

                    Object.keys(obj).forEach((key,i)=>{

                        if (typeof obj[key]==='object'){

                            constantize(obj[key]);

                        } 

                })

        };

    相关文章

      网友评论

          本文标题:ES6之let与const

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