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

    let 是 es6.0 新增的定义变量的方式,用来声明局部变量,用法类似于 var 但也有区别

    • 定义块级作用域变量

      {
          var i=0;
      }
      console.log(i);//0
      

      {} 无法限定 var 定义的变量的访问范围

      {
          let i=0;
      }
      console.log(i); //Uncaught ReferenceError: i is not defined
      

      {} 能限定 let 定义的变量的访问范围

    • 解决闭包问题共用父级作用域的问题

      function test(){
          var arr = []
          for(var i=0;i<10;i++){	//执行到最后 i = 10
              arr[i] = function(){	//这里只是函数的定义,并不会取存 i 的值
                  console.log(i);
              }
          }
          return arr;
      }
      var myArr = test();
      for(var j=0;j<10;j++){
          myArr[j]();		//10个10
      }
      

      被保存到外部的10个函数共用一个父级作用域

      function test(){
          var arr = []
          for(let i=0;i<10;i++){	
              arr[i] = function(){	
                  console.log(i);
              }
          }
          return arr;
      }
      var myArr = test();
      for(var j=0;j<10;j++){
          myArr[j]();		//0-9
      }
      

      let定义的变量每次执行都是一个全新的作用域,被保存到外部的10个函数有10个不同的作用域

    • let 变量预编译不会提升

      console.log(i)
      var i=0     //undefined
      

      var 定义的变量预编译阶段会声明提升

      console.log(i)
      let i=0     //Uncaught ReferenceError: Cannot access 'i'
      

      let 定义的变量不会提升

    • let 变量不能重复声明

      var i=0;
      var i=1;
      

      var 重复声明并不会报错

      let i=0;
      let i=1;  //ncaught SyntaxError: Identifier 'i' has already been declared
      

      let 重复声明报错

  • 相关阅读:
    Win10 蓝屏
    XE Button Color
    IOS 屏幕尺寸
    Delphi 转圈 原型进度条 AniIndicator 及线程配合使用
    Delphi 询问框 汉化
    Delphi Android 询问框
    Delphi BLE 控件
    浮点高低位赋值
    delphi 蓝牙 TBluetoothLE
    16进制字节转换
  • 原文地址:https://www.cnblogs.com/angle-yan/p/13339921.html
Copyright © 2011-2022 走看看