ES6之let与const

2018-10-20  本文已影响0人  lionlsc

在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]);

                    } 

            })

    };

上一篇 下一篇

猜你喜欢

热点阅读