乐趣区

关于前端:动图演示变量提升通俗易懂

作者:Ahmad shaded
译者:前端小智
起源:sitepoint

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

‘ 晋升 ’ 是 JS 开发都常常接触的一个术语,如果你刚接触 JS,可能会遇到一些奇怪的行为,其中一些变量是随机undefined,会抛出ReferenceErrors 异样等等。晋升通常被解释为将变量和函数放到作用域顶部,但实际上并不是这样,只管行为看起来是这样的。

当 JS 引擎获取咱们的代码时,它要做的第一件事就是为代码中的数据 设置内存。目前还没有执行任何代码,只是筹备要执行的所有内容。函数申明和变量的存储形式不同。函数是以按保留函数的援用的形式来存储。

1. 函数是以按保留函数的援用的形式来存储(Functions are stored with a reference to the entire function

应用变量,则有所不同。ES6 引入了两个新的关键字来申明变量:letconst。用letconst关键字申明的变量保留的状态是 uninitialized

2. 用 letconst关键字申明的变量保留的状态是 uninitialized

应用 var 关键字申明的变量存储的默认值为undefined

当初创立阶段曾经实现,咱们能够执行代码。让咱们看看在申明函数或任何变量之前,如果顶部执行 3console.log语句会产生什么。

因为函数存储在对整个函数代码的援用中,所以咱们能够在创立它们的行之前调用它们。

4. 在执行阶段,咱们能够在申明函数之前调用它们,因为咱们在内存中援用了整个函数(During the execution phase, we can invoke a function before we declared them, since we a reference to the entire function in memory)

当咱们在变量申明之前援用 var 关键字申明的变量时,它只会返回其存储时的默认值:undefined。然而,这有时会导致“意料之外”的行为。在大多数状况下,咱们有可能会无心中从新援用了它(你可能不心愿它的值为undefined)

5. 当咱们在变量申明之前援用 var 关键字申明的变量时,它只会返回其存储时的默认值:undefined

为了避免意外援用 undefined 的变量,就像咱们能够应用 var 关键字一样,每当咱们试图拜访 未初始化 (uninitialized) 的变量时,都会抛出一个ReferenceError。在它们理论申明之前的“区域”称为 ** 长期死区 **: 不能在它们的初始化之前援用变量(这也包含ES6 类 `)

6. 每当咱们试图拜访 未初始化 (uninitialized) 的变量时,都会抛出一个 ReferenceError。在它们理论申明之前的“区域”称为 长期死区 **

当引擎通过咱们理论申明变量的那一行时,内存中的值会被咱们理论申明的值笼罩。

总结

  • 在执行代码之前,函数和变量存储在内存中,用于执行上下文,这就是所谓的晋升。
  • 函数存储为对整个函数的援用,用 var 关键字申明的变量默认值为 undefined,用letconst关键字申明变量默认存储值为uninitialized

心愿本文对你有所帮忙,感激浏览。


原文:https://dev.to/lydiahallie/ja…

代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。

交换

有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。

本文 GitHub https://github.com/qq44924588… 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。

退出移动版