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 相关文章推荐
jQuery的Ajax时无响应数据的解决方法
May 25 Javascript
为何JS操作的href都是javascript:void(0);呢
Nov 12 Javascript
jQuery实现图像旋转动画效果
May 29 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
微信小程序 地图map详解及简单实例
Jan 10 Javascript
微信小程序实战之顶部导航栏(选项卡)(1)
Jun 19 Javascript
利用node.js+mongodb如何搭建一个简单登录注册的功能详解
Jul 30 Javascript
jQuery基于cookie实现换肤功能实例
Oct 14 jQuery
JS字符串与二进制的相互转化实例代码详解
Jun 28 Javascript
小程序中this.setData的使用和注意事项
Aug 28 Javascript
vue中添加与删除关键字搜索功能
Oct 12 Javascript
24行JavaScript代码实现Redux的方法实例
Nov 17 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中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
2014/01/19 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
tp5框架无刷新分页实现方法分析
2019/09/26 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
js鼠标滑轮滚动事件绑定的简单实例(兼容主流浏览器)
2014/01/14 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
javascript实现随机读取数组的方法
2015/08/03 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jQuery过滤特殊字符及JS字符串转为数字
2016/05/26 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
vue 防止页面加载时看到花括号的解决操作
2020/11/09 Javascript
Vue组件简易模拟实现购物车
2020/12/21 Vue.js
Vue实现简单计算器
2021/01/20 Vue.js
Python实现学生成绩管理系统
2020/04/05 Python
python logging重复记录日志问题的解决方法
2018/07/12 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
2020/01/22 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
python切割图片的示例
2020/11/12 Python
python 使用paramiko模块进行封装,远程操作linux主机的示例代码
2020/12/03 Python
详解Python中的文件操作
2021/01/14 Python
深入解读CSS3中transform变换模型的渲染
2016/05/27 HTML / CSS
HTML5 b和i标记将被赋予真正的语义
2009/07/16 HTML / CSS
HTML5组件Canvas实现图像灰度化(步骤+实例效果)
2013/04/22 HTML / CSS
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
小学生元旦感言
2014/02/26 职场文书
校车安全管理责任书
2015/05/11 职场文书
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
如何用PHP websocket实现网页实时聊天
2021/05/26 PHP