ES6 let const

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

暂时性死区:let.const

let,不允许重复声明,let不允许在相同作用域内,重复声明同一个变量;不能在函数内部重新声明参数;

const命令

   声明一个只读的常量。一旦声明,常量的值就不能改变。

   同时也说明,一旦声明,就要立即初始化,否则也报错。

与let相似:

   const命令声明的常量也不提升,同样存在暂时性死区,只能在声明的位置后使用。

   也不可以重复声明。

对于复合类型的变量,变量名不指向数据,而是指向数据所在的地址。const命令只

   是保证变量名指向的地址不变,并不保证该地址的数据不变,所以将一个对象声明为常量,

   必须非常小心。


const foo = {};

            foo.prop = 123;

            console.log(foo.prop);

            //上面的常量foo存储的是对象的地址,这个地址不可变,但依然可以添加属性。const a = [];

            a.push("hello");

            a.length = 0;//          a = ["Dave"]  //报错,赋值就是更换地址,不行的。//如果真的想把对象冻结,应该使用Object.freeze方法。const foo2 = Object.freeze({});

            //常规模式下,下面一行不起作用//严格模式下,会报错foo.prop = 123;

  ES5只有两种声明变量的方法:var和function。  

  ES6有6种:var function let const class import

全局对象属性:

   全局对象是最顶层的对象,在浏览器环境下指的是window对象,在node指的是

   global对象。ES5中,全局对象的属性和全局变量是等价的。

   未声明的全局变量,自动成为全局对象window的属性,这被认为是js的最大败笔。

   ES6为了改变这一点,一方面规定,为了保持兼容性,var命令和function命令声明的全局变量,

   依旧是全局对象的属性,另一方面规定,let,const,class命令声明的全局变量不属于全局对象的

   属性。也就是说,从ES6开始,全局变量将逐渐与全局对象的属性脱钩。

  ES5只有全局作用域和函数作用域,没有块级作用域,有很多不合理场景:

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容