let 讲解

作者: zhang463291046 | 来源:发表于2020-08-13 10:24 被阅读0次

    以下内容是引用或者借鉴别人的,自己只是做个笔记,方便学习。理解错误的地方,欢迎评论。如有侵权,私聊我删除,未经允许,不准作为商业用途

    let常见错误写法

    • let定义变量必须先声明后使用,否则报错
    • let只在命令声明所在的代码块内有效,否则报错
    • let命令声明所在的代码块内会形成封闭作用域,必须先声明后使用,否则报错
    • let不允许在相同作用域内,重复声明同一个变量,否则报错
    {
      console.log(a)  // ReferenceError: Cannot access 'a' before initialization
      let a = 1;
      var a = 1;  // SyntaxError: Identifier 'a' has already been declared
      console.log(a)  //  1
    }
    console.log(a)  // ReferenceError: a is not defined.
    
    var a = 1
    {
       a = 2      //ReferenceError: Cannot access 'a' before initialization
       let a = 3
    }
    
    function func(a) {
      let a;    //  同作用域下已经被声明为形参
    }
    func() // SyntaxError: Identifier 'a' has already been declared
    

    for循环特别之处,设置循环变量的是一个父作用域,而循环体内部是一个单独的子作用域。循环变量i与函数内部的变量i不在同一个作用域,有各自单独的作用域

    for (let i = 0; i < 3; i++) {
      console.log(i);  //父作用域值
    }
    // 0
    // 1
    // 2
    for (let i = 0; i < 3; i++) {
      let i = 5;
      console.log(i);  //子作用域值
    }
    // 5
    // 5
    // 5
    

    块级作用域{},每个块都有单独的作用域

    // IIFE 写法
    (function () {
      var tmp = ...;
      ...
    }());
    
    // 块级作用域写法
    {
      let tmp = ...;
      ...
    }
    
    // 块级作用域内部的函数声明语句,建议不要使用
    {
      let a = 'secret';
      function f() {
        return a;
      }
    }
    
    // 块级作用域内部,优先使用函数表达式
    {
      let a = 'secret';
      let f = function () {
        return a;
      };
    }
    

    const用法与上面讲解的let基本一致,除了以下这点

    • 声明一个只读的常量,且声明时,必须立即赋值,并且不能再改变(内存地址,因为再赋值时会创建新地址)
    const a   // SyntaxError: Missing initializer in const declaration
    const b = 1 
    b = 2  // TypeError: Assignment to constant variable
    
    const a = {}
    a.c = 1   //不会报错,因为地址没有变
    a = {}  //TypeError: Assignment to constant variable.
    

    相关文章

      网友评论

        本文标题:let 讲解

        本文链接:https://www.haomeiwen.com/subject/lrnfdktx.html