美文网首页
ES6 let const

ES6 let const

作者: 工藤新二_cad2 | 来源:发表于2018-11-29 14:51 被阅读0次

    暂时性死区:只要块级作用域内存在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只有全局作用域和函数作用域,没有块级作用域,有很多不合理场景:

    相关文章

      网友评论

          本文标题:ES6 let const

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