前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动画篇:变量提升

动画篇:变量提升

作者头像
前端修罗场
发布2022-07-29 08:31:37
3100
发布2022-07-29 08:31:37
举报
文章被收录于专栏:Web 技术

变量提升(Hoisting)被认为是, Javascript中执行上下文 (特别是创建和执行阶段)工作方式的一种认识。在 ECMAScript® 2015 Language Specification 之前的JavaScript文档中找不到变量提升(Hoisting)这个词。不过,需要注意的是,开始时,这个概念可能比较难理解,甚至恼人。

例如,从概念的字面意义上说,“变量提升”意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确。实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中。

当 JS 引擎获取我们的脚本时,它做的第一件事就是为我们代码中的数据设置内存。此时没有执行任何代码,它只是为执行做准备。函数声明和变量的存储的方式不同。函数与对整个函数的引用一起存储。

有了变量,就有点不同了。ES6 引入了两个新的关键字来声明变量:let 和 const。使用 let 或 const 关键字声明的变量未初始化存储

使用 var 关键字声明的变量以默认值 undefined 存储。

现在创建阶段已经完成,我们可以执行代码了。让我们看看如果我们在代码顶部有 3 个 console.log 语句,在我们声明函数或任何变量之前会发生什么。

由于函数存储在对整个函数代码的引用中,因此我们甚至可以在创建它们的行之前调用它们!🔥

当我们在声明之前引用使用 var 关键字声明的变量时,它会简单地返回其存储时的默认值:undefined!但是,这有时会导致“意外”行为。在大多数情况下,这意味着你无意中引用了它 😬

为了防止意外引用未定义的变量,就像我们可以使用 var 关键字一样,每当我们尝试访问未初始化的变量时都会抛出 ReferenceError。实际声明之前的“区域”称为临时性死区:不能在初始化之前引用变量。

当 JS 引擎执行到我们实际声明的变量时,内存中的值将被我们实际声明它们的值覆盖。

回顾:

  • 在我们执行代码之前,函数和变量存储在内存中作为执行上下文。这称为变量提升。
  • 函数与对整个函数的引用一起存储,带有 undefined 值的 var 关键字的变量以及带有 let 和 const 关键字的变量以未初始化的方式存储。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端修罗场 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 回顾:
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档