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 相关文章推荐
js实现的网站首页随机公告随机公告
Mar 14 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
Jun 03 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
使用phantomjs进行网页抓取的实现代码
Sep 29 Javascript
javascript中的this详解
Dec 08 Javascript
javascript动态修改Li节点值的方法
Jan 20 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
Sep 26 Javascript
基于原生js淡入淡出函数封装(兼容IE)
Oct 20 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
Jan 20 Javascript
JavaScript方法_动力节点Java学院整理
Jun 28 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
Jul 03 jQuery
交互式可视化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 静态化实现代码
2009/03/20 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
详解json在php中的应用
2018/09/30 PHP
javascript 隐藏/显示指定的区域附HTML元素【legend】用法
2010/03/05 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
jQuery实现hover合成事件的方法
2015/08/06 Javascript
JavaScript操作class和style样式代码详解
2016/02/13 Javascript
纯js实现瀑布流布局及ajax动态新增数据
2016/04/07 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
基于jquery实现弹幕效果
2016/09/29 Javascript
微信小程序 animation API详解及实例代码
2016/10/08 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
nodejs之get/post请求的几种方式小结
2017/07/26 NodeJs
提升页面加载速度的插件InstantClick
2017/09/12 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
ReactNative实现Toast的示例
2017/12/31 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
[02:23]2014DOTA2国际邀请赛中国战队回顾
2014/08/01 DOTA
Python re模块介绍
2014/11/30 Python
Python单元测试框架unittest使用方法讲解
2015/04/13 Python
Python编程中对super函数的正确理解和用法解析
2016/07/02 Python
Python爬取网易云音乐热门评论
2017/03/31 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
Python解析json代码实例解析
2019/11/25 Python
详解python tkinter 图片插入问题
2020/09/03 Python
无需JS和jQuery代码实现CSS3鼠标浮动放大图片
2016/11/21 HTML / CSS
CSS3动画特效在活动页中的应用
2020/01/21 HTML / CSS
护理专业应届毕业生推荐信
2013/11/15 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
元旦晚会主持词
2014/03/24 职场文书
高一语文教学反思
2016/02/16 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
javascript对象3个属性特征
2021/11/17 Javascript