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扩展插件Validate 3通过参数设置错误信息
Sep 05 Javascript
简单js代码实现selece二级联动(推荐)
Feb 18 Javascript
javascript根据时间生成m位随机数最大13位
Oct 30 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
JavaScript判断前缀、后缀是否是空格的方法
Apr 15 Javascript
Javascript通过overflow控制列表闭合与展开的方法
May 15 Javascript
利用jQuery设计一个简单的web音乐播放器的实例分享
Mar 08 Javascript
浅谈js中子页面父页面方法 变量相互调用
Aug 04 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
Dec 26 Javascript
微信小程序倒计时功能实现代码
Nov 09 Javascript
对Vue table 动态表格td可编辑的方法详解
Aug 28 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 18 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教程 插件机制在PHP中实现方案
2012/11/02 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
php生成二维码不保存服务器还有下载功能的实现代码
2018/08/09 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
JS、CSS加载中的小问题探讨
2013/11/26 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
js实现仿MSN带关闭功能的右下角弹窗代码
2015/09/04 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
bootstrap输入框组使用方法
2017/02/07 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
Vue如何实现组件的源码解析
2017/06/08 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
numpy.std() 计算矩阵标准差的方法
2018/07/11 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
2019/07/22 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python GUI库图形界面开发之PyQt5布局控件QGridLayout详细使用方法与实例
2020/03/06 Python
tensorflow中tf.reduce_mean函数的使用
2020/04/19 Python
python使用建议与技巧分享(二)
2020/08/17 Python
运行python提示no module named sklearn的解决方法
2020/11/29 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
Perfume’s Club美国官网:西班牙第一家在线美容店
2020/06/10 全球购物
视图的作用
2014/12/19 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
小学岗位竞聘方案
2014/01/22 职场文书
结对共建工作方案
2014/06/02 职场文书
党员作风建设自查报告
2014/10/23 职场文书
党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
小学运动会前导词
2015/07/20 职场文书
python 使用tkinter与messagebox写界面和弹窗
2022/03/20 Python
Python os和os.path模块详情
2022/04/02 Python