zoukankan      html  css  js  c++  java
  • 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;
      }
  • 相关阅读:
    熟悉常用的HBase操作
    第三章 熟悉常用的HDFS操作
    爬虫大作业
    数据结构化与保存
    爬取校园新闻首页的新闻
    网络爬虫基本练习
    综合练习:词频统计
    Hadoop综合大作业
    理解MapReduce
    熟悉常用的HBase操作
  • 原文地址:https://www.cnblogs.com/jassin-du/p/9472631.html
Copyright © 2011-2022 走看看