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 相关文章推荐
Javascript优化技巧(文件瘦身篇)
Jan 28 Javascript
预加载css或javascript的js代码
Apr 23 Javascript
转换json格式的日期为Javascript对象的函数
Jul 13 Javascript
javascript利用初始化数据装配模版的实现代码
Nov 17 Javascript
jquery的ajax请求全面了解
Mar 20 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
Mar 18 Javascript
jQuery中dom元素上绑定的事件详解
Apr 24 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
Mar 05 Javascript
js获取时间函数及扩展函数的方法
Oct 30 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
Jan 19 Javascript
jsTree事件和交互以及插件plugins详解
Aug 29 Javascript
微信小程序实现的一键复制功能示例
Apr 24 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
2013/06/14 PHP
php绘制一条直线的方法
2015/01/24 PHP
THINKPHP3.2使用soap连接webservice的解决方法
2017/12/13 PHP
PHP CURL使用详解
2019/03/21 PHP
PHP实现统计代码行数小工具
2019/09/19 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
Javascript中的数学函数
2007/04/04 Javascript
Jquery post传递数组方法实现思路及代码
2013/04/28 Javascript
jquery 模板的应用示例
2013/11/12 Javascript
JS中判断null、undefined与NaN的方法
2014/03/24 Javascript
js实现点击后将文字或图片复制到剪贴板的方法
2014/08/04 Javascript
实例解析jQuery插件EasyUI最常用的表单验证规则
2015/11/29 Javascript
node.js 动态执行脚本
2016/06/02 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
React Native基础入门之初步使用Flexbox布局
2018/07/02 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
解决vue+ element ui 表单验证有值但验证失败问题
2020/01/16 Javascript
Vue动态加载图片在跨域时无法显示的问题及解决方法
2020/03/10 Javascript
编写一个javascript元循环求值器的方法
2020/04/14 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
Docker如何部署Python项目的实现详解
2020/10/26 Python
python tqdm库的使用
2020/11/30 Python
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
大学本科毕业生求职信范文
2013/12/18 职场文书
社区工作者先进事迹
2014/01/18 职场文书
村干部培训方案
2014/05/02 职场文书
地球一小时宣传标语
2014/06/24 职场文书
学校党支部承诺书
2015/04/30 职场文书
python数字图像处理:图像的绘制
2022/06/28 Python
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS