Es6语法----声明

2017-12-21  本文已影响10人  Sujz

Es6 在 Es5 的基础上,新增了4种 声明方式,一共有6种:

1. var  2.function  3.let  4.const  5.import  6.class

今天学习了 Let 和 const ,后续会补充其余新增的2种;

Let(变量声明):

1. 块级作用域:  let 声明的变量只有自己所在的 作用域 能够获取和调用;

2. 关闭了 变量提升, 使代码运行更合理

3. 暂时性死区:  在let作用域内,let的所有变量获取和调用必须在,let声明之后才可以获取和调用;

4.不允许重复声明

Const(常量声明):

1. 块级作用域:  const 声明的变量只有自己所在的 作用域 能够获取和调用;

2. 关闭了 变量提升, 使代码运行更合理

3. 暂时性死区:  在const作用域内,const的所有变量获取和调用必须在,const声明之后才可以获取和调用;

4.不允许重复声明

5.const声明的常量不能更改(地址);

本质: const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。

例如:

const obj = {};

obj.name = "Sujz"; // 新增属性成功

obj = {}; // 报错 (因为,改变了 地址 )

如果想将对象冻结(即,不能新增属性):

const foo = Object.freeze({});

foo.prop = 123; // 常规模式,这行不起作用,即 无法改变 foo 的值,也无法新增 foo 的属性,并且,在严格模式下,还会报错;

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

var constantize = (obj) => {

  Object.freeze(obj);

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

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

      constantize( obj[key] );

    }

  });

};

上一篇下一篇

猜你喜欢

热点阅读