• ES6中的let命令


    ES6新增了let命令,用于声明变量。其用法类似var,区别是使用let命令声明的变量只在当前代码块有效。

    for循环的计数器就很适合使用let命令。

    var arr= [1,2,3,4,5];
    for(var i=0;i<arr.length;i++){
           //something to do...
    } 
    alert(i); //运行结果为5,但如果使用let,会报错i is not defined

    下面的代码如果使用var,最后将输出10;

    1 var a = [];
    2   for(var i = 0;i<10;i++){
    3       a[i] = function(){
    4        alert(i);
    5      }
    6   }
    7 var func = a[7];
    8 func();

    这是因为变量i使用var声明,在全局范围内有效,每次循环新的i值就会覆盖旧值。

    而如果使用let声明变量,i只在本次循环中有效,所以以下代码的输出结果为7。

    1 var a = [];
    2     for(let i = 0;i<10;i++){
    3         a[i] = function(){
    4           alert(i);
    5         }
    6     }
    7 var func = a[7];
    8 func();

    使用let声明变量,变量一定要在声明后使用,不然会报变量未定义的错误。

    1 console.log(str);
    2 var str = "111" //undefined
    3 // let str = "111"; //str is not defined

    上面的代码如果使用var声明变量str,仅仅会输出变量undefined。而使用let命令声明,则会抛出str is not defined异常。

    只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响。ES6规定,如果区块中存在let和const命令,则这个区块对这些命令声明的变量从一开始就形成封闭作用域,只要在声明之前使用这些变量就会报错。这在语法上称作“暂时性死区”(temporal dead zone)。

    1 var tmp = 123;
    2 if(true){
    3      tmp = "abc"; //tmp is not defined
    4      let tmp; //将声明的变量绑定到这个区域,不再受外部影响
    5 }

    查看代码运行效果

     参考阮一峰《ES6标准入门》

  • 相关阅读:
    分割线
    PTA 乙级 1053 住房空置率 (20分) C/C++
    5.12 记录
    单词统计
    eclipse导入项目jdk版本不一样
    5.6日 项目回顾
    5.5 记录
    5.3 记录
    5.2 记录
    5.1 记录
  • 原文地址:https://www.cnblogs.com/yaotome/p/7279268.html
Copyright © 2020-2023  润新知