• let 的含义,及let 与 var 的区别


    1. let 声明的变量,只在他所在的代码模块下有效;

    for( let i=0;i<10;i++ ){

      console.log(i);                // 0--9

    }

    console.log(i);                         // i 未定义

    上面代码中,计数器i只在for循环体内有效,在循环体外引用就会报错。如下var代码:


    //------------------------------------------------------

    2.   var a=[];

          for(var i=0;i<10;i++){

        a[i]=function(){

          console.log(i);

        }

          }

         a[1]();                      //10

         

    变量i是var声明的,在全局范围内都有效,所以每一次循环,新的i值都会覆盖旧值,导致最后输出的是最后一轮i的值。

    //----------------------------------------------------------------------------------------------------------------------------------

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

    //使用 let,声明的变量仅在块级作用域内有效;
    //----------------------------------------------------------------------------------
    2. 不存在变量提升
    let不会像 var 那样发生 “变量提升”,变量需要先声明然后再使用,否则会报错;
    var 的情况
    console.log(aaa); //undefined;
    var aaa="aaa";


    let情况
    console.log(bbb); //报错 bbb is not defined
    let bbb = "bbb";

    let bbb = "bbb";
    console.log(bbb); //bbb

    3. 暂时性死区
    块级作用域内存在let命令,它所声明的变量就绑定在这个区域,不再受外部影响;
    var tmp = 123;
    if(true){
    tmp = 'abc';
    // console.log(tmp); //abc
    let tmp;
    console.log(tmp); //tmp is not defined
    }
    //

     上面代码定于全局变量tmp,但是在快级作用域内let又声明了一个局部变量tmp,导致绑定了这个快级作用域;因此打印出tmp会报错。

      

    4. 不允许重复声明
    let 不允许在相同作用域内 重复声明同一个变量,会报错
    function a(){
    let a = 10;
    var a = 1;
    console.log(a);
    }
    a(); //报错 Identifier 'a1' has already been declared

    function a(){
    let a1 = 10;
    let a1 = 1;
    console.log(a1);
    }
    a(); // Identifier 'a1' has already been declared
    //--------------------------------------------------------------------------------
    //也不能在函数内部重新声明参数
    // function fun1(arg){
    // let arg;
    // }
    // fun1(); //Identifier 'arg' has already been declared

    function fun2(arg){
    {
    let arg;
    }
    }
    fun2(); //不报错
    //-----------------------------------------------------
    ES6 的块级作用域
    function f1(){
    let n=5;
    if(true){
    let n = 10;
    }
    console.log(n); //5 外层代码不受 内层代码影响;
    }
    f1();

    function f2(){
    var n = 5;
    if(true){
    var n=10;
    }
    console.log(n); //10
    }
    f2();



  • 相关阅读:
    金融风控100道面试题:传统银行开发转行互金top3公司并年薪40多万
    想学好矩阵?首先你要知道矩阵的历史!​
    什么是卷积?
    CNN的卷积核是单层的还是多层的?
    AI换脸之后“AI换声”来了!,一小时诈骗173万!
    介绍两个面试神器
    Github最火!程序员必须知道22大定律和法则
    SQL常用运算符
    SQL利用通配符进行模式查询
    隐藏DataList里面的某一行数据
  • 原文地址:https://www.cnblogs.com/nnf-888/p/8423420.html
Copyright © 2020-2023  润新知