[译]JavaScript️可视化:变量提高

本系列包括6篇文章javascript

提高是每一个JS开发人员都据说过的那些术语之一,由于您在Google上搜索了使人讨厌的错误并最终到达StackOverflow,此人告诉您此错误是因为提高引发的。🙃那么,提高是什么?(仅供参考- 范围将在另外一篇文章中介绍,我但愿使文章小而集中)java

若是您不熟悉JavaScript,则可能会遇到“怪异”的行为,其中某些变量是随机的undefined,ReferenceErrors会被抛出,依此类推。提高一般被解释为将变量和函数放在文件的顶部,可是,那不是事实,虽然行为看起来像这样git

当JS引擎获取咱们的脚本时,它要作的第一件事就是为代码中的数据设置内存。在这一点上,没有代码被执行,只是准备好全部要执行的东西。函数声明和变量的存储方式不一样。函数以对整个函数的引用存储。github

对于变量,则有所不一样。ES6引入了两个新的关键字来声明变量:let和const。用letor const关键字声明的变量未初始化存储。函数

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

如今建立阶段已经完成,咱们能够实际执行代码了。让咱们看看若是在声明函数或任何变量以前在文件顶部有3个console.log语句,会发生什么状况。3d

因为函数是在引用整个函数代码的状况下存储的,所以咱们甚至能够在建立它们的行以前调用它们!🔥code

当咱们引用与声明的变量var的声明以前的关键字,它会简单地返回它存储与它的默认值:undefined!可是,这有时可能会致使“意外”行为。在大多数状况下,这意味着您无心中引用了它(您可能不但愿它实际上具备的值undefined)😬cdn

为了防止undefined像使用var关键字那样意外地引用变量,ReferenceError每当咱们尝试访问未初始化的变量时,都将引起a 。在它们实际声明以前的“区域”称为时间盲区:在初始化以前,您不能引用变量(也包括ES6类!)。blog

当引擎经过咱们实际声明变量的行时,内存中的值将被咱们实际声明它们的值覆盖。

(糟糕,我如今注意到这应该是数字7。将尽快更新)。

全作完了!🎉快速回顾:

在执行代码以前,将函数和变量存储在内存中以用于执行上下文。这称为吊装。 函数存储与将整个函数的参考,与变量var与值的关键字undefined,和变量与let和const关键字地存储未初始化。 我但愿提高术语一词的含义再也不那么模糊,由于咱们已经研究了执行代码时发生的状况。与往常同样,不要担忧它是否仍然没有任何意义。您使用它的次数越多,您将对其感到更加自在。随时向我寻求帮助,我很乐意为您服务!😃

我的博客

github.com/abc-club/fr…

相关文章
相关标签/搜索