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 重复声明报错

  • 相关阅读:
    Delphi中的接口和抽象类
    设计模式之六大原则
    C 标准库
    linux 管道和重定向
    linux c创建静态库(.a)
    一个C语言程序
    C#动态创建lambda表达式
    linq中order by 和group by (含lambda表达式实现)以及综合案例
    微信扫码登陆原理
    二维码扫码支付原理
  • 原文地址:https://www.cnblogs.com/angle-yan/p/13339921.html
Copyright © 2011-2022 走看看