ES6_Day-1-let-const

ES6引入新的变量声明方式: let、const

ES6一共6中变量命名方式:var,let、const、function、class、import

let命令:

  不存在变量提升:

    在声明之前引用会报错(ReferenceError)

  暂时性死区:

    let声明的变量作用域为块级作用域,在块级作用域中声明了变量,但在其声明之前无法调用。 

 var temp = 'nothing';
 // 更加具体的声明优先级更高
 if(true){
            temp = 'OK'
            // 当在块级作用域中使用let或const声明变量后,不允许在声明之前进行赋值操作
            let temp;
            console.log(temp)
      //会报错,由于在更具体的块级作用域中对变量进行了声明,因此会覆盖 全局变量 temp,而let声明的变量在声明之前无法调用,产生死区 }

  不允许重复声明:

    let 不允许在同一作用域内重复声明同一变量。即以let 命令声明的变量,不再允许以其他任何方式进行声明。

            if(true){
                let temp = 'A'
                // let temp = 'B'
                // var temp = 'B'
                // const temp = 'B'
                temp = 'B'
                //此种方式能够对 let 声明的变量进行修改,并非重新定义
                console.log(temp)
            }
     console.log(temp
     //用于验证第六行代码并非重新定义

块级作用域:{}

  由于函数命名提升,因此ES5中不允许在块级作用域中进行函数的声明。(但是浏览器可能不会报错,允许在块级作用域中进行函数声明)

  ES6中明确规定了块级作用域。函数可在块级作用域中进行声明,但是不能在块级作用域外部进行引用,类似在块级作用域中使用 var 命令进行函数变量声明。

const命令

  const声明一个只读常量,一旦声明不再改变。即该变量只能且必须在声明时进行一次初始化。

  块级作用域内有效

  不存在变量提升,存在暂时性死区

  不可重复声明

  const方式的本质是保证变量所指向的地址不会改变。因此对于基本数据类型,相同的地址必然是相同的字面量,因此变量简单数据类型的值不会发生改变。而对于复杂数据类型不能够保证其内部属性的不变。

            if(true){
                const temp = ['A'];
                console.log(temp, )
                temp.push('B')
                //修改引用类型的值并不会报错,且能够成功修改
                console.log(temp)
            }

顶层对象属性

  ES5中顶层对象的属性与 全局变量是等价的。

  ES6规定,var与function命令声明的全局变量依旧是顶层对象的属性,而let、const、class声明的全局变量不属于顶层对象属性。

globalThis对象

  用于解决多种环境下顶层对象不同带来的差异。

posted @ 2019-05-05 21:04  已经崩盘了  阅读(93)  评论(0编辑  收藏  举报