zoukankan      html  css  js  c++  java
  • ES6 之 let 命令 Better

    • 块级作用域
    • 不存在变量提升
    • 暂时性死区
    • 不允许重复声明

    1. 块级作用域

    let 命令,用来声明变量,但声明的变量,只在 let 命令所在的代码块有效。

    {
      let a = 10;
      var b = 1;
    }
    
    a // ReferenceError: a is not defined.
    b // 1

    2. 不存在变量提升

    var命令会发生“变量提升”现象,即变量可以在声明之前使用,值为 undefined

    这种现象多多少少是有些奇怪的,按照一般的逻辑,变量应该在声明语句之后才可以使用。

    为了纠正这种现象,let命令改变了语法行为,它所声明的变量一定要在声明后使用,否则报错。

    // var 的情况
    console.log(foo); // 输出undefined
    var foo = 2;
    
    // let 的情况
    console.log(bar); // 报错ReferenceError
    let bar = 2;

    3. 暂时性死区(temporal dead zone,简称 TDZ)

    只要块级作用域内存在 let命令,它所声明的变量就“绑定”(binding)这个区域,不再受外部的影响。

    var tmp = 123;
    
    if (true) {
      tmp = 'abc'; // ReferenceError
      let tmp;
    }

    “暂时性死区”也意味着 typeof不再是一个百分之百安全的操作。

    typeof x; // ReferenceError
    let x;

    作为比较,如果一个变量根本没有被声明,使用 typeof反而不会报错。

    typeof undeclared_variable // "undefined"

    “暂时性死区”报错的例子

    // 示例一
    
    function bar(x = 2, y = x) {
      return [x, y];
    }
    bar(); // [2, 2]
    
    
    // 示例二
    
    // 不报错
    var x = x;
    
    // 报错
    let x = x;
    // ReferenceError: x is not defined

    4. 不允许重复声明

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

    因此,不能在函数内部重新声明参数。

    function func(arg) {
      let arg;
    }
    func() // 报错
    
    function func(arg) {
      {
        let arg;
      }
    }
    func() // 不报错
  • 相关阅读:
    教师资格证考试全部重点名词解释
    计算机软考中高级职称评定条件
    如何计算教师工龄?工龄和教龄的区别
    vue.js中 this.$nextTick()的使用
    数组的合并 总结的几种方法
    CSS3实现了左右固定中间自适应的几种方法
    文本溢出省略号
    MVC/MVP/MVVM
    vue中父组件给子组件传值的方法
    vue实例的生命周期
  • 原文地址:https://www.cnblogs.com/huangtq/p/14439416.html
Copyright © 2011-2022 走看看