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验证表单大全
Nov 25 Javascript
Javascript & DHTML 实例编程(教程)基础知识
Jun 02 Javascript
网页中CDATA标记的说明
Sep 12 Javascript
有关于eclipse配置spket需要注意的一些地方
Apr 07 Javascript
js Calender控件使用详解
Jan 05 Javascript
JSONObject使用方法详解
Dec 17 Javascript
Vue中render方法的使用详解
Jan 26 Javascript
vue-prop父组件向子组件进行传值的方法
Mar 01 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
Sep 18 Javascript
Vue项目中如何使用Axios封装http请求详解
Oct 23 Javascript
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
Jun 02 Javascript
Vue 组件复用多次自定义参数操作
Jul 27 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_Flame(Version:Progress)的原代码
2006/10/09 PHP
php 无限级缓存的类的扩展
2009/03/16 PHP
php设计模式 State (状态模式)
2011/06/26 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
php设计模式之单例模式使用示例
2014/01/20 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
简单实现异步编程promise模式
2015/07/31 Javascript
javascript检测flash插件是否被禁用的方法
2016/01/14 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
AngularJS的$location使用方法详解
2017/10/19 Javascript
Angular2实现组件交互的方法分析
2017/12/19 Javascript
JS实现换肤功能的方法实例详解
2019/01/30 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
python操作mysql数据库
2017/03/05 Python
python Opencv将图片转为字符画
2021/02/19 Python
python使用插值法画出平滑曲线
2018/12/15 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
python elasticsearch环境搭建详解
2019/09/02 Python
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
销售自荐信
2013/10/22 职场文书
业务经理的岗位职责
2013/11/16 职场文书
党校培训思想汇报
2013/12/30 职场文书
yy结婚证婚词
2014/01/10 职场文书
住院医师规范化培训实施方案
2014/06/12 职场文书
在校生证明
2015/06/17 职场文书
大学新生入学感想
2015/08/07 职场文书
关于感恩的素材句子(38句)
2019/11/11 职场文书
Python数据类型最全知识总结
2021/05/31 Python
CPU不支持Windows11系统怎么办
2021/11/21 数码科技
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers