ES-6 let 和 const 指令

let指令

  • let仅在区块代码中有效
  • let的使用不存在变量提升(var的使用存在变量提升)
  • let不能够未声明先使用
  • 在let的“先使用”到“再声明”这种不正确的做法情况下,这个区间称之为“暂时性死区”(temporal dead zone,简称 TDZ)
  • 在let声明之前,使用typeof对该变量进行操作仍会出现ReferenceError
  • let在同一个作用域内,不允许重复声明,(注意:var与let也不能够重复)

    // 报错
    function () {
    let a = 10;
    var a = 1;
    }
    // 报错
    function () {
    let a = 10;
    let a = 1;
    }

块级作用域

  • 块级作用域中,外层无法读取内层的变量
  • 在ES6中,允许块级作用域中声明函数,但和let关键字类似的是,该函数在块级作用域之外也不可引用。
  • 块级作用域的出现,令“立即执行函数表达式(IIFE)”闭包的使用减少。

const指令

  • 对于const来说,只声明不赋值,就会报错。
  • const声明的常量,也与let一样不可重复声明。
  • const常量声明后,会指向一个对象(JS对象、数字对象、字符对象等),这个对象本身不允许改变,但允许给这个对象添加/修改属性。可使用const foo = Object.freeze({});创建一个不可修改的freeze,被冻结了的对象。

ES 6 中的变量声明

  • var
  • function
  • let
  • const
  • import
  • class

全局对象和属性

  • var命令和 function命令声明的全局变量,在ES 6中仍然是全局的属性
  • let命令、 const命令、class命令声明的全局变量,不属于全局对象(window或global)的属性
  • 全局变量逐步与全局对象的属性脱钩
原文地址:https://www.cnblogs.com/HXW-from-DJTU/p/6645363.html