zoukankan      html  css  js  c++  java
  • 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标准入门》

  • 相关阅读:
    BZOJ4066 简单题(KD-Tree)
    [HAOI2006]受欢迎的牛 tarjan缩点 + 拓扑排序
    [JSOI2007]重要的城市 floyd:最短路计数
    [SDOI2017]新生舞会 0/1分数规划
    [APIO2017]商旅 0/1分数规划
    [HNOI2009]最小圈
    算法——0/1分数规划
    运动员最佳匹配问题 KM算法:带权二分图匹配
    [NOI2015]荷马史诗
    [HAOI2010]计数 数位DP+组合数
  • 原文地址:https://www.cnblogs.com/yaotome/p/7279268.html
Copyright © 2011-2022 走看看