• es6


    基本语法

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

    在代码块中声明了a,b。然后a is not defined.这是因为let命令只在对应的代码块中有效,我们在外部去引用它,就会报错。这就是let的块级作用域的效果,如果不太清楚什么是块级作用域。我们来看下面的例子。

    var a = [];
    for (var i = 0; i < 10; i++) {
      a[i] = function () {
        console.log(i);
      };
    }
    a[0]();//10
    a[6](); // 10

    i在for循环中定义的是全局变量。我们在调用函数时。函数内部的i引用的是全局的i,所以打印出来的 是10. 我们之前是这样解决的

     var a = [];
        for (var i = 0; i < 10; i++) {
            a[i] = (function (a) {
                return function(){
                    console.log(a);
                }
            }(i));
        }
        a[0]();//0
        a[6](); // 6

    使用了立即执行函数将i的值传入了内部的函数,这样内部的函数就能够获取到对应的i。

    我们用let来代替var,最后输出的是 6。

    var a = [];
    for (let i = 0; i < 10; i++) {
     a[i] = function () {
       console.log(i);
     };
    }
    a[6](); // 6

    因为我们每一次的循环都生成了一个新的块级作用域,内部保存着i的值,所以就会打印出6.

    let不存在变量提升

       console.log(a);
       console.log(b);
       var a=0;//undefined
       let b=0;//ReferenceError: b is not defined

    TDZ(暂时性死区) let命令在块级作用域中,即使不存在变量提升,它也会影响当前块级作用域,即绑定在了当前作用域。在作用域中引用外部的变量将会报错。

     var a=10;
      {
          console.log(a);  //ReferenceError: a is not defined
          let a=10;
      }
  • 相关阅读:
    Yii2 composer报错处理
    bootstrap元素居中
    前端面试题
    control-lable的用法
    jenkins持续集成搭建
    gitlab管理平台搭建
    mysql8.0.11安装
    nexus私服搭建、配置、使用
    mysql5.7.22安装
    nginx配置阿里云免费ssl证书实现https化
  • 原文地址:https://www.cnblogs.com/jassin-du/p/9472631.html
Copyright © 2020-2023  润新知