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

    区别:

    1.  var声明的变量,其作用域在该语句所在的函数之内,存在着变量提升的现象。
    2.  let声明的变量,其作用域为该句所在的代码块内,不存在变量提升的问题。
    3.  let相比于var,其不允许在相同作用域内,重复声明同一个变量。
      {
        let a = 11;
        var b = 51;
      }
      a // Uncaught ReferenceError: a is not defined
      b // 51

      上述的代码的结果说明,let所声明的变量只在其代码块中有效。

      var a = [];
      for (var i = 0; i < 4; i++) {
        a[i] = function () {
          console.log(i);
        };
      //使用var声明,得到4个4
      }
      a[0](); //4
      a[1](); //4
      a[2](); //4
      a[3](); //4
      //使用let声明,得到0,1,2,3
      
      var a = [];
      for (let i = 0; i < 4; i++) {
        a[i] = function () {
          console.log(i);
        };
      }
      a[0](); //0
      a[1](); //1
      a[2](); //2
      a[3](); //3
      //使用let声明,得到0,1,2,3

      上述for循环的例子,我们可以这样理解。当for循环使用let时产生了块级作用域,每次循环块级作用域中的 i 都相互独立,并不像var那样全程共用了一个。因此它输出的结果便与var的结果不同。

      var boo=521;
      if(true){
          boo='abc';//ReferenceError: boo is not defined
          let boo;
      }

                 上述代码中,存在着全局变量boo,但是块级作用域内let又声明了一个局部变量boo,导致后者绑定这个块级作用域,所以在let声明变量前,对boo赋值会报错。总而言之,在代码块内,使用let命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”。

     在这里,再加下const,因为const的行为与let基本相同,唯一一个重要的区别为用于它声明变量时必须初始化变量,且尝试修改const声明的变量会导致运行时错误.const与let一样声明变量也是一个块级作用域变量,const声明的变量也没有"变量提升",必须先声明后使用,且也不可以与前面的let,var,const所声明的变量重复,但是,const声明的变量重定义的对象数组中的属性值是可以修改的,基础数据类型不可以修改而已.
     
  • 相关阅读:
    Balance_01背包
    4 Values whose Sum is 0_upper_bound&&ower_bound
    Newspaper Headline_set(upper_bound)
    lower_bound和upper_bound算法
    Blocks_DP&&矩阵快速幂
    All X_数的快速幂
    Training little cats_矩阵快速幂
    Raising Modulo Numbers_快速幂取模算法
    Defining Python Source Code Encodings
    Python ord(char)
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14120248.html
Copyright © 2011-2022 走看看