首页 > 其他分享 >var、let和const三者有哪些区别?

var、let和const三者有哪些区别?

时间:2024-06-18 10:36:10浏览次数:10  
标签:const 变量 作用域 let var 声明

var、let和const三者有哪些区别?

(1)var:传统的变量声明方式

在ES5及之前的JavaScript版本中,我们通常使用var关键字声明变量。var具有以下特点:

函数作用域:变量的作用域限制在声明的函数内部,如果在函数外部访问,将会报错。

变量提升:变量声明会被提升到作用域的顶部,无论声明语句在哪里,都会被视为在作用域的开始处声明的。

可以重复声明:同一个作用域内,可以多次使用var声明同一个变量,后面的声明会覆盖前面的。

虽然var在过去工作中表现良好,但它的作用域机制和变量提升的特性常常导致意外的bug。为了解决这些问题,ES6引入了letconst

(2)let: 块级作用域的变量声明方式

let关键字是在ES6中引入的新特性,具有以下特点:

块级作用域:使用let声明的变量仅在其所在的代码块内有效,如果在代码块外部访问,将会报错。这种特性有助于提高代码的可读性和可维护性。

不可重复声明:同一个作用域内,不可以多次使用let声明同一个变量,否则会报错。

没有变量提升let声明的变量不会被提升到作用域的顶部,只有在声明语句之后才能使用。

让我们来看一个示例,以更好地理解let关键字的作用:

{  
  let x = 10;  
  console.log(x); // 输出 10
}
console.log(x); // 报错,x 未定义

在上面的例子中,变量x只在大括号内部的代码块中有效,尝试在代码块外部访问会导致错误。这种行为使得我们可以更好地控制变量的作用范围,提高代码质量。

(3)const: 声明常量的方式

const关键字也是在ES6中引入的新特性,与let相似,但具有以下特点:

常量:使用const声明的变量是常量,意味着一旦被赋值后,就不能再修改。常量的命名通常使用全大写字母,并采用下划线分隔单词。

块级作用域:与let一样,const也具有块级作用域。

不可重复声明:同一个作用域内,不可以多次使用const声明同一个变量,否则会报错。

常量的不可修改性可以帮助我们避免错误的赋值操作,提高代码的可靠性。以下是一个常量的示例:

const PI = 3.14;
console.log(PI); // 输出 3.14
PI = 3.1415; // 报错,常量不可被修改

区别: 

1.变量提升

  var声明的变量存在变量提升,即变量可以在声明之前调用,值为undefined

  let和const不存在变量提升,即它们所声明的变量一定要在声明后使用,否则报错

2.块级作用域

  var不存在块级作用域

  let和const存在块级作用域

3.重复声明

  var允许重复声明变量

  let和const在同一作用域不允许重复声明变量

4.修改声明的变量

  var和let可以

  const声明一个只读的常量。一旦声明,常量的值就不能改变,但对于对象和数据这种引用类型,内存地址不能修改,可以修改里面的值。 

 

标签:const,变量,作用域,let,var,声明
From: https://www.cnblogs.com/czhowe/p/18253840

相关文章

  • SingletonKit单例源码阅读学习
    阅读学习QFramwork中的SingletonKit源码。Singleton普通类的单例作为最常用的单例模块,通过继承单例泛型类来实现,需要私有构造;//使用第一种接口单例方式internalclassClass2Singleton:Singleton<Class2Singleton>{//记录被初始化的次数privat......
  • JavaWeb学习-tomcat和servlet
    前言本文介绍javaweb的基本知识,包括CS和BS的架构形式、web容器、servlet等。CS和BSCS:客户端服务器架构模式优点:充分利用客户端机器的资源,减轻服务器的负荷。缺点:需要安装;升级维护成本较高。BS:浏览器服务器架构模式优点:客户端不需要安装;维护成本较低。缺点:所有的计算和存储......
  • 1832javaERP管理系统之车间计划管理Myeclipse开发mysql数据库servlet结构java编程计算
    一、源码特点 javaerp管理系统之车间计划管理是一套完善的web设计系统,对理解JSPjava编程开发语言有帮助采用了serlvet设计,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql,使用java语言开发。......
  • Rajeev K. Varshney:设计未来作物,基因组学辅助育种时代来临
    介绍一篇RajeevKumarVarshney于2021年在TrendsinPlantScience专题《养活世界:植物育种的未来》上的综述,强调了基因组学辅助育种(genomics-assistedbreeding,GAB)的作用和意义。关于RajeevKumarVarshney,他在基因组测序、利用遗传多样性、基因组学辅助育种、种子系统和发展......
  • servlet数量太多,搞个轻量级springmvc
    这两天用jsp+servlet+MySQL开发了一个企业网站,后台和前台都有,功能已经实现了,现在总结发现,servlet是真的多,我这个系统有7个表,后台实现一遍增删改查,就得有28个servlet,而且还有前台的部分,servlet的数量真的太多了,想想看springmvc,其实是可以写一个轻量级的springmvc的。在Servl......
  • 【C++ | const成员】一文了解类的 const数据成员、const成员函数、const对象、mutable
    ......
  • 【JUC】8-CompletableFutrue的常用方法
    1、获得结果和触发计算获得结果1publicTget()23publicTget(longtimeOut,Timeunitunit)45publicTjoin()67publicgetNow(TvalueIfAbsent)主动触发计算publicbooleancomplete(Tvalue) 2、对计算结果进行处理计算结果存在依赖关系,这两个线程串......
  • manim边学边做--Variable
    Variable是Mobjects分类中专门用来显示变量的一个class。前面两篇介绍的Integer和DecimalNumber都可以作为变量Variable来显示。Variable在manim各个模块中的位置如上图中所示。1.主要参数Variable以label=value的形式展示数值的变化情况。一般会结合其他动画一起使用,在其他......
  • youcomplete的vimrc配置文件demo
    离开youcompleteme,vim的使用体验差很多。下面是vimrc文件中ycm相关配置demo。对于C/C++语言的语法补齐需要安装clangd.setnusetexpandtabsettabstop=4setshiftwidth=4setmouse=asetshell=bashsethlssetencoding=utf-8"YoucomPleteMe:语句补全插件",reftoh......
  • 核心(Hutool-core)语言特性(单例工具-Singleton)
    为什么会有这个类平常我们使用单例不外乎两种方式:在对象里加个静态方法getInstance()来获取。此方式可以参考【转】线程安全的单例模式(opensnewwindow)这篇博客,可分为饿汉和饱汉模式。通过Spring这类容器统一管理对象,用的时候去对象池中拿。Spring也可以通过配置决定懒汉......