当前位置: 首页 > article >正文

一文大白话讲清楚ES6中var/let/const之间的区别与联系

文章目录

  • 一文大白话讲清楚ES6中var/let/const之间的区别与联系
  • 1.还是那句话,黑猫白猫都是抓老鼠的
  • 2.黑猫是黑的,白猫是白的
    • 2.1 变量提升
    • 2.2 暂时性死区
    • 2.3 块级作用域
    • 2.4 重复声明
    • 2.5 变量值修改
    • 2.6 window绑定

一文大白话讲清楚ES6中var/let/const之间的区别与联系

1.还是那句话,黑猫白猫都是抓老鼠的

  • 不管是ES6之前的var,还是ES6之后的let和const,都是用来创建数据变量的,这个无可厚非
  • 不同JavaScript数据变量的,看我这篇文章 最全的javascript的基本数据类型和引用数据类型讲解,以及基本数据类型和引用数据类型在存储上的区别

2.黑猫是黑的,白猫是白的

  • 既然都是创建变量的,那有啥区别呢,看下文

2.1 变量提升

  • var创建的变量存在变量提升,即在变量声明之前就可以调用变量,值为undefined
  • let 和 const 创建的变量不存在变量提升,如果在声明前引用,直接报错
  • 上代码
console.log(aOfVar)//undefined
var aOfVar=5

console.log(aOfLet)
let aOfLet=6;// Cannot access 'aOfLet' before initialization

console.log(aOfConst)// Cannot access 'aOfLet' before initialization
const aOfConst=7
  • 有人问了,为啥var会做变量提升呢,什么时候提升的呢
  • 在执行上下文创建阶段的时候做的提升,具体看我这篇文章 一文大白话讲清楚执行上下文和执行栈

2.2 暂时性死区

  • 啥叫暂时性死区,其实说的跟2.1是一回事,暂时性死区就是只有等待变量声明的那一行代码被执行,才可以获取和使用变量。
  • 那let和const肯定存在暂时性死区
  • var肯定不存在,因为他提升了,所以没到执行变量声明行,就可以访问,只不过值为undefined

2.3 块级作用域

  • 先说啥叫块级作用域,就是用{}包起来的区域,该区域内的变量只能在该区域使用
  • var 不存在块级作用域
  • let和const存在块级作用域
{
    var aOfVar=5
}
console.log(aOfVar)//5


{
    let aOfLet=6
}
console.log(aOfLet)// aOfLet is not defined


{
    const aOfConst=7
}

console.log(aOfConst)// aOfLet is not defined

2.4 重复声明

  • var 允许重复生命两个同名变量
  • let和const不可以

var aOfVar=5
var aOfVar=55
console.log(aOfVar)//55


let aOfLet=6.
let aOfLet=66// Identifier 'aOfLet' has already been declared

const aOfConst=7
const aOfConst=77// Identifier 'aOfLet' has already been declared

2.5 变量值修改

  • var和let的变量值可以修改
  • const变量的值不可以修改

var aOfVar=5
aOfVar=55
console.log(aOfVar)//55


let aOfLet=6.
aOfLet=66
console.log(aOfLet)//66

const aOfConst=7
aOfConst=77//  Assignment to constant variable.


2.6 window绑定

  • var定义的变量会被绑定在window对象上
  • 而let和const不会

    var aOfVar=5
    console.log(window.aOfVar)//55


    let aOfLet=6.
    console.log(window.aOfLet)//undefined

    const aOfConst=7
    console.log(window.aOfConst)//undefined

http://www.kler.cn/a/471497.html

相关文章:

  • 【第01阶段-基础必备篇-第二部分--Python之基础】04 函数
  • 解密序列建模:理解 RNN、LSTM 和 Seq2Seq
  • HTML 显示器纯色亮点检测工具
  • 【unity调用c++动态库,c++和c#相互调用】
  • Python编程实例-机器学习中的Hinge Loss编程实现
  • Mac软件介绍之录屏软件Filmage Screen
  • MySQL 14 章——视图
  • mysql20250107
  • 【Vim Masterclass 笔记07】S05L19:Vim 剪切、复制、粘贴操作同步练习
  • 使用Python创建文件夹结构生成器
  • .NET Core 对象分配(Alloc)底层原理浅谈
  • 【论文阅读笔记】MoGe: 使用最优训练监督解锁开放域图像的精确单目几何估计
  • 【Java】——方法
  • 网络安全的学习与实践经验(附资料合集)
  • 深入Android架构(从线程到AIDL)_16 应用Android的UI框架03
  • NVIDIA发布RTX 50系列显卡:性能飞跃,Blackwell架构引领新时代
  • Vue.js组件开发-实现图表数据动态展示
  • 继承(5)
  • Qt: 无法运行rc.exe
  • PyTorch 官方文档 中文版本
  • Axure PR 9 锚点定位滚动 设计交互
  • IP查询于访问控制保护你我安全
  • 虚拟机Linux Red Hat 7.9 Docker部署.Net 7 Zr.Admin项目(后端)
  • nfs开机自动挂载
  • 《Mcal》--MCU模块
  • HTML-多媒体标签