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

  • 相关阅读:
    Python开发【第二十一篇】:Web框架之Django【基础】
    梳理
    Python Day15 jQuery
    day12 html基础
    Python day11 Mysql
    锻炼马甲线
    第一章:软件性能测试基本概念
    第4关—input()函数
    第3关—条件判断与嵌套
    第2关—数据类型与转换
  • 原文地址:https://www.cnblogs.com/angle-yan/p/13339921.html
Copyright © 2011-2022 走看看