javascript的var与let,const之间的区别详解


Posted in Javascript onFebruary 18, 2022

说到JavaScript中声明变量的几种方法也就是varletconst了,letconstes6中新增的命令。那么它们之间有什么区别呢?

我们先整体说一下三者的区别,在详细介绍,var、let、const的区别主要从以下几点分析:

  • 作为全局变量时的不同
  • 变量提升
  • 暂时性死区
  • 块级作用域
  • 重复声明
  • 修改声明的变量

作为全局变量时

ES5中,顶层对象的属性和全局变量是等价的,用var声明的变量既是全局变量,也是顶层变量的属性

但是ES6中用let声明的变量可以在全局访问到,但是并没有在顶层变量的属性上,const声明的常量同样也不会在顶层变量上

javascript的var与let,const之间的区别详解

变量提升

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

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

console.log(a)  // undefinedvar a = 1console.log(b)  // Cannot access 'b' before initializationlet b = 2console.log(c)  // Cannot access 'c' before initializationconst c = 3console.log(a)  // undefined
var a = 1

console.log(b)  // Cannot access 'b' before initialization
let b = 2

console.log(c)  // Cannot access 'c' before initialization
const c = 3

暂时性死区

var不存在暂时性死区

letconst存在暂时性死区,只有等到声明变量的那一行代码被执行后,才可以获取和使用该变量

其实这一点就是有上一点变量提升延伸而来的区别。因为var声明的变量存在变量提升,在声明之前使用该变量值为undefined,不会报错,所有没有暂时性死区。letconst在该作用域开始前后,变量或常量声明之前使用会报错,这一块区域也就被称为暂时性死区

例同上文:

console.log(a)  // undefined
var a = 1

console.log(b)  // Cannot access 'b' before initialization
let b = 2

console.log(c)  // Cannot access 'c' before initialization
const c = 3

块级作用域

var不存在块级作用域

letconst存在块级作用域

{    var a = 2}console.log(a)  // 2{    let b = 2}console.log(b)  // Uncaught ReferenceError: b is not defined{    const c = 2}console.log(c)  // Uncaught ReferenceError: c is not defined

重复声明

var在相同作用域下允许重复声明,后面声明的变量会覆盖前面的变量声明

letconst在相同作用域下不允许重复声明

var a = 10
var a = 20 // 20

let b = 10
let b = 20 // Identifier 'b' has already been declared

const c = 10
const c = 20 // Identifier 'c' has already been declared

修改声明的变量(常量与变量声明)

varlet声明的是变量,声明后的变量可被修改

const声明得失常量,只读。一旦声明,常量的值就不能改变。但是需要注意的是,对于引用数据类型,JavaScript中的变量或者常量存储的是该数据的存储地址,只要不直接修改该常量的引用,修改其指向的对象的属性是可以的。

var a = 10
a = 20
console.log(a)  // 20

let b = 10
b = 20
console.log(b)  // 20

const c = 10
c = 20 // Uncaught TypeError: Assignment to constant variable

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注三水点靠木的更多内容!

Javascript 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
javascript 实现 秒杀,团购 倒计时展示的记录 分享
Jul 12 Javascript
javascript的数组和常用函数详解
May 09 Javascript
jquery插件推荐浏览器嗅探userAgent
Nov 09 Javascript
JS获取图片高度宽度的方法分享
Apr 17 Javascript
jquery实现Ctrl+Enter提交表单的方法
Jul 21 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
May 21 Javascript
文件上传插件SWFUpload的使用指南
Nov 29 Javascript
利用JS如何计算字符串所占字节数示例代码
Sep 13 Javascript
js 将canvas生成图片保存,或直接保存一张图片的实现方法
Jan 02 Javascript
微信小程序实现时间预约功能
Nov 27 Javascript
react中props 的使用及进行限制的方法
Apr 28 Javascript
交互式可视化js库gojs使用介绍及技巧
gojs实现蚂蚁线动画效果
uni-app 微信小程序授权登录的实现步骤
Feb 18 #Javascript
详解TypeScript的基础类型
Feb 18 #Javascript
详解jQuery的核心函数和事件处理
Feb 18 #jQuery
JavaScript事件的委托(代理)的用法示例详解
Feb 18 #Javascript
vue项目中的支付功能实现(微信支付和支付宝支付)
Feb 18 #Vue.js
You might like
社区(php&&mysql)一
2006/10/09 PHP
用PHP调用Oracle存储过程的方法
2008/09/12 PHP
PHP提示Notice: Undefined variable的解决办法
2012/11/24 PHP
php Calender(日历)代码分享
2014/01/03 PHP
浅谈Laravel模板实体转义带来的坑
2019/10/22 PHP
用ADODB.Stream转换
2007/01/22 Javascript
jQuery 源码分析笔记(3) Deferred机制
2011/06/19 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
html的DOM中document对象anchors集合用法实例
2015/01/21 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
PHP抓取HTTPS内容和错误处理的方法
2016/09/30 Javascript
jQuery Password Validation密码验证
2016/12/30 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
详解webpack中的hash、chunkhash、contenthash区别
2018/01/05 Javascript
webpack+vue-cli项目中引入外部非模块格式js的方法
2018/09/28 Javascript
VUEX采坑之路之获取不到$store的解决方法
2019/11/08 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
Python标准库os.path包、glob包使用实例
2014/11/25 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
pytorch构建网络模型的4种方法
2018/04/13 Python
Django Python 获取请求头信息Content-Range的方法
2019/08/06 Python
python 使用shutil复制图片的例子
2019/12/13 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
解决django FileFIELD的编码问题
2020/03/30 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
儿子婚宴答谢词
2014/01/09 职场文书
七年级政治教学反思
2014/02/03 职场文书
诉前财产保全担保书
2014/05/20 职场文书
主要领导对照检查材料
2014/08/26 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
2015年端午节活动总结
2015/02/11 职场文书
岗位聘任报告
2015/03/02 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android