zoukankan      html  css  js  c++  java
  • let与var的区别

    1.let作用域局限于当前代码块

    文章中//后面的均为打印结果

    代码1:

    {
        var str1 = "小花";
        let str2 = "小明";
        console.log(str1); //小花
        console.log(str2); //小明
    }
    console.log(str1); //小花
    console.log(str2); //Error:str2 is not defined
    

    let作用域仅限于当前代码块,而var的作用域是全局的

    2.let作用域不会被提升

    代码2:

    {
        console.log(str1); //undedined
        console.log(str2); //str2 is not defined
        var str1 = "小花";
        let str2 = "小明";
    }
    

    let作用域不会被提升,而var作用域会被提升

    代码2相当于:

    {
        var str1;
        console.log(str1); //undedined
        console.log(str2); //str2 is not defined
        str1 = "小花";
        let str2 = "小明";
    }
    

    3.let不能被重复定义

    代码3:

    var str1 = "小花1";
    var str1 = "小花2";
    let str2 = "小明1";
    let str2 = "小明2";

    上面这段代码运行会报错:Identifier 'str2' has already been declared

    var重复定义后面的会覆盖前面的,而let则不行,会报语法错误,str2标识符已经被声明

    4.let父子作用域

    代码4:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>learn</title>
      </head>
      <body>
          <button>按钮1</button>
          <button>按钮2</button>
          <button>按钮3</button>
          <button>按钮4</button>
          <button>按钮5</button>
          <script>
            var btns = document.querySelectorAll('button')
            for(var i=0;i<btns.length;i++){
                btns[i].onclick = function(){
                alert('点击第'+i+'个按钮')
              }
            }
          </script>
      </body>
    </html>
    

    此时不管点击哪个都是弹出点击第5个按钮,因为此时在点击的事件触发的时候,for循环已经走完了,而此时的i的值为5,此时i变成全局的了,所以不管点击哪个都会弹出点击第5个按钮。

    代码5:

    <!DOCTYPE html>
    <html>
      <head>
        <meta charset="utf-8">
        <title>learn</title>
      </head>
      <body>
          <button>按钮1</button>
          <button>按钮2</button>
          <button>按钮3</button>
          <button>按钮4</button>
          <button>按钮5</button>
          <script>
            let btns = document.querySelectorAll('button')
            for(let i=0;i<btns.length;i++){
                btns[i].onclick = function(){
                alert('点击第'+i+'按钮')
                }
            }
          </script>
      </body>
    </html>

    将上面代码的var改成let,点击的时候就会依次弹出对应的i的值,因为此时let定义的变量i的生命周期到for循环最后的大括号就结束了,所以alert中的i和btns[i]中的i对应的就是每次循环的值。

    以上四点就是let与var的区别,如果有问题可以在评论里提哦。

  • 相关阅读:
    如何为创建大量实例节省内存?
    4-5
    4-6
    4-4
    4-3
    4-2
    3-11
    4-1
    3-10
    3-8
  • 原文地址:https://www.cnblogs.com/yukixing/p/11523259.html
Copyright © 2011-2022 走看看