1. 首页

【前端基础】变量提升别有一翻风味

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

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

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

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

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

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

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

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

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

现在创建阶段已经完成,我们可以执行代码。让我们看看在声明函数或任何变量之前,如果顶部执行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)

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

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

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

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

为了防止意外引用undefined的变量,就像我们可以使用var关键字一样,每当我们试图访问未初始化(uninitialized )的变量时,都会抛出一个ReferenceError。在它们实际声明之前的“区域”称为**临时死区**:不能在它们的初始化之前引用变量(这也包括ES6类`)

6.每当我们试图访问未初始化(uninitialized )的变量时,都会抛出一个ReferenceError。在它们实际声明之前的“区域”称为临时死区**

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

当引擎通过我们实际声明变量的那一行时,内存中的值会被我们实际声明的值覆盖。

JS中文网 码农进阶题库;每天一道面试题 or Js小知识

总结

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

希望本文对你有所帮助,感谢阅读。


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


交流

干货系列文章汇总如下,觉得不错点个Star,欢迎 加群 互相学习。

链接:https://segmentfault.com/a/1190000021295254
作者:Lydia Hallie

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「画漫画的程序员」,公众号后台回复「资源」 免费领取我精心整理的前端进阶资源教程

JS中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。欢迎热爱技术的你一起加入交流与学习,JS中文网的使命是帮助开发者用代码改变世界

本文著作权归作者所有,如若转载,请注明出处

转载请注明:文章转载自「 Js中文网 · 前端进阶资源教程 」https://www.javascriptc.com

标题:【前端基础】变量提升别有一翻风味

链接:https://www.javascriptc.com/3563.html

« Js中文网周刊第57期
深入理解JavaScript系列(15)- 函数(Functions)»
Flutter 中文教程资源

相关推荐

QR code