首页 > 解决方案 > 函数实际上是否在变量之前首先被提升?

问题描述

有人在 Discord 上给我发了这张照片,说函数首先被提升,然后是变量。

prnt .sc/xdwc9a (请删除点前的空格,我不想发垃圾邮件)

他的陈述似乎是正确的,因为正在调用该函数而没有引发任何错误。

Kyle Simpson 在他的 YDKJS 书中也说了同样的话:

但是,当我尝试它时,我没有得到我所期望的。记录器() // 10

function logger(){

var x = 10;

function x(){

console.log('Function code')

}

function x(){
  console.log("more code")
}

console.log(x)

}

这将返回 10,但是由于首先提升了函数,因此应该提升 x 函数,并且在尝试提升 var x; 时在第二次提升(提升变量)中运行 它应该忽略它,因为函数 x 已经被提升了,但看起来这不是这里发生的事情!

我错过了什么吗?

标签: javascriptcompilationhoisting

解决方案


变量和函数一样首先被提升。但是当变量首先被提升时,它们的值是undefined. 另一方面,函数声明(不是表达式或 IIFE)的内容会被提升。

这是来自MDN的吊装。


推荐阅读