• ES6简介之let和const命令解说


      一、var申明变量

      学习过JavaScript的同学都应该知道,ES5中申明变量使用var,ES5中的var可以说是无所不能的,所有类型的变量都是由var来申明,但往往很多使用者不知道var申明的变量存在变量提升,即变量可以在申明之前使用,有时不注意申明的作用域会导致全局变量污染,特别要注意这种隐形的全局变量申明,直接没有val,比如a = 3,像这个变量a就成了全局变量,如果此时你在用var申明一个a变量,在使用过程中隐形变量a 的值就会被覆盖,这就是容易导致全局变量污染的原因之一,还以一个大家可能会产生误解的地方就是,所谓全局变量就是在javaScript代码中function最前边的var申明是全局变量,后面的就不是,其实var申明的变量只要不在function中就全部是全局变量,这点一定要注意。特别要说明的一点就是var申明的变量存在变量提升,我们先来看下面一段简单的代码

      
    1 console.log(a);
    2 var a = 4;
    3 会输出underfined,不会报错referenceError
    var申明变量提升举例说明

      二、let申明变量

      今天要给大家解说的let申明变量使用跟var申明一样滴,只不过let申明的变量是只在代码块中有效,即{}中有效,看下面代码

      
    1 {
    2   let a = 10;
    3   var b = 3;    
    4 }
    5 console.log(a)
    6 //ReferenceError:a is not defined
    7 console.log(b)
    8 // 3
    let 变量申明

      从这段代码的运行结果可以明显的看出,let申明的变量出了代码块就无法访问,这样就一定程度上避免了全局变量污染,而且let申明的变量不存在变量提升的现象,也就是说使用let申明变量只能先声明在使用,否则就会报错,现在说的块级作用域可以称作为暂时性死区(TDZ),在这个暂时性死区中申明的变量外边无法访问。还有一点就是一个变量不允许let和var重复申明。在这里顺道给大家说一下块级作用域,ES5中只有全局作用域和函数作用域,没有块级作用域这导致很多场景不合理:

      第一种场景:内层变量可能会覆盖外层变量;

      第二种场景:用来计数的循环变量泄露为全局变量;

    let实际上就是为JavaScript新增了块级作用域,而且块级作用域可以嵌套。有兴趣的同学可以去看一看ES6中的do表达式,获取代码块的返回值。

      三、const申明变量

          const申明一个只读的常量,一旦申明,常量的值就不能改变,也就是说const一旦申明常量,就必须立即初始化,不能留到以后赋值,否则就会报错。

      关于ES6中let和const命令申明变量就说这么,如有错误之处,欢迎大家评论区指正讨论,感谢!

      

  • 相关阅读:
    OAuth2.0说明文档
    CentOS直接解压可用的memcached、nginx、keepalived
    CentOS离线安装GCC编译环境
    [交通安全]电动自行车认定为非机动车的文件
    修改sublime列编辑快捷键
    手机号归属地接口
    ubuntu下typora的gitee图床配置-----基于picgo
    spyder无法切换中文输入法
    lightgbm直方图算法
    xgboost原理分析
  • 原文地址:https://www.cnblogs.com/hexiaobao/p/10170572.html
Copyright © 2020-2023  润新知