首页 > 其他分享 >一文彻底了解ES6中的var、let、const基本用法以及暂时性死区和变量提升的区别

一文彻底了解ES6中的var、let、const基本用法以及暂时性死区和变量提升的区别

时间:2024-08-23 15:50:51浏览次数:12  
标签:ES6 const 变量 作用域 死区 let var 声明

         ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的命名占位符。有三个关键字可以声明变量:var、let、const。其中 var 在ECMAScript 的所有版本中都可以使用,而 const 和 let 只能在ECMAScript 6 及更高版本中使用。

一、var

        var可以定义单个变量和同时定义多个变量,在定义多个变量时用逗号隔开

       

       在 ECMAScript 中 var 关键字声明的变量可以重复声明,但是赋值操作会覆盖前面已经给变量赋的值。值不仅可以改变,数据类型也可以改变。

        

        var声明的全局变量全局作用域会挂载到 window 对象上,可以使用window. 的形式访问该变量,或者直接使用变量名的方式。在函数体内部的用var声明的变量是局部变量,当省略 var时,当前变量会定义为全局变量,但是当我要得到这个变量的值时,我们需要先执行一下函数

二、let

        let 声明的范围是块作用域,而 var 声明的范围是函数作用域。

         let 不可以重复声明变量,var 可以重复声明变量

        切记同一作用域下 let 和 var 混合重复定义一个变量会报错

        let的全局声明不会成为 window 对象的属性( var 声明的变量则会)

三、const

      const 的行为和 let 基本相同,唯一一个重要的区别就是它在声明变量的同时必须初始化变量

      const 声明的变量不允许修改

      const 也是不可重复声明

      const 声明的作用域也是块

      const 声明限制只适用于它指向变量的引用。换句话说,如果 const 变量引用的是一个对象,那么修改这个对象内部的值不违反 const 的限制。引用未发生改变就行。

     

重点来了:var变量提升和let暂时性死区的区别!!!

        变量提升本质上相当于把声明变量和初始化都提前到当前作用域顶部

       

        var声明的变量会把变量声明放到当前作用域顶部,并且赋值为undefined

        通过 let 声明的变量直到它们的定义被执行时才初始化。在变量初始化前访问该变量会导致 ReferenceError。该变量处在一个自块顶部到初始化处理的“暂存死区”中。(暂时性死区相当于把声明变量提升的当前作用域顶部,并没有初始化操作

        你就记住let声明的变量在真正的声明前是不能进行任何操作的!!!

标签:ES6,const,变量,作用域,死区,let,var,声明
From: https://blog.csdn.net/tom739303/article/details/141465842

相关文章

  • #define,const,constexpr的区别与应用
    目录1. #define2. constint3.常量表达式4. constexpr总结1. #define作用:#define 是一个预处理指令,用于在编译前进行文本替换。语法:#defineNAMEVALUE特点:无类型:#define 只是简单的文本替换,没有类型信息。作用域:#define 定义的常量在整个文件中有效,直到......
  • C++ const的用法详解
    前言const在C/C++中是十分重要的,如果单纯理解为"常量"那么你的格局就小了,今天在这里给大家介绍一下const在C++中具体详细的用法。一const的基本概念const名叫常量限定符,用来限定特定变量,以通知编译器该变量是不可修改的。习惯性的使用const,可以避免在函数中对某些不应修改的......
  • MapStruct+Maven+Lombok问题NoSuchBeanDefinitionException、does not have an access
    概述先直接说我遇到的问题吧,SpringBoot应用启动失败:ERROR|org.springframework.boot.web.embedded.tomcat.TomcatStarter|onStartup|61|-ErrorstartingTomcatcontext.Exception:org.springframework.beans.factory.UnsatisfiedDependencyException.Message:Er......
  • (2-2-2)LiDAR激光雷达传感器感知:点云处理(2)法向量估计(Normal Estimation)+曲面重建(Surface
    2.2.4 法向量估计(NormalEstimation)算法法向量估计的目的是计算每个点的法向量,用于后续任务如曲面重建和特征提取。常用的法向量估计(NormalEstimation)算法如下所示。1.最小二乘法(LeastSquares)算法最小二乘法(LeastSquares)算法通过最小化点云到法向量的误差来估计法向......
  • [Paper Reading] Reconstructing Hands in 3D with Transformers
    名称ReconstructingHandsin3DwithTransformers时间:CVPR2024机构:UCBerkeley,UniversityofMichigan,NewYorkUniversityTL;DR本文提出一种使用Transformer来做HandTracking的算法名为HaMeR(HandMeshRecorvery),优势是大数据规模(利用多数据集的2D/3D标签),大模型(......
  • JavaScript ES6 Map
    Map对象保存键值对。任何值(对象或者原始值)都可以作为一个键或一个值。Maps和Objects的区别一个Object的键只能是字符串或者Symbols,但一个Map的键可以是任意值。Map中的键值是有序的(FIFO原则),而添加到对象中的键则不是。Map的键值对个数可以从size属性获......
  • var let const 之间的比较
    var特点函数作用域:var声明的变量在函数内有效,如果在函数外声明,则为全局作用域。变量提升:var声明的变量会被提升到函数的顶部,初始化为undefined。即使在声明之前引用,JavaScript也不会抛出错误。可重复声明:在同一作用域内,可以多次声明同一个变量,不会引发错误。用法//在......
  • Android经典实战之约束布局ConstraintLayout的实用技巧和经验
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点ConstraintLayout是Android中一种强大的布局管理器,能够帮助你创建复杂而灵活的布局。它通过约束系统将一个View的位置和大小与其他View或父布局联系起来,使得......
  • 轻松理解es6执行上下文
    想要学好js,深入理解js的如何运行肯定是少不了的。这篇文章是结合各个网站上的大佬们的文章在加上自己的理解形成的,如有错误的地方,请帮我纠正一下,谢谢。前言当js引擎去执行一段代码的时候,如何确定代码的执行顺序,以及变量何时被定义,this的指向等,想要更深入理解这些问题,必须了......
  • ES6 (二)——ES6 let 与 const
    目录let命令不存在变量提升const命令注意要点ES2015(ES6)新增加了两个重要的JavaScript关键字: let 和 const。let声明的变量只在let命令所在的代码块内有效。const声明一个只读的常量,一旦声明,常量的值就不能改变。let命令基本用法:{leta=0;a......