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声明的变量重定义的对象数组中的属性值是可以修改的,基础数据类型不可以修改而已.
     
  • 相关阅读:
    sockaddr与sockaddr_in,sockaddr_un结构体详细讲解
    busybox程序连接 ln怎么回事?怎样实现的
    有线网卡与无线网卡同时使用
    "$(@:_config=)"
    C#中Global文件
    Win7 IIS7 HTTP 错误 404.2 Not Found解决方法
    C#中的日期处理函数
    js字母大小写转换
    asp.net发布到IIS中出现错误:处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”
    sql server在存储过程中使用游标和事务
  • 原文地址:https://www.cnblogs.com/ljylearnsmore/p/14120248.html
Copyright © 2011-2022 走看看