为什么在 return 语句后没有提升函数?

And*_*ich 4 javascript

const func = () => {
  someFunction() // error here
  
  return function someFunction() {
    console.log('hello')
  }
}

func()
Run Code Online (Sandbox Code Playgroud)

我创建了闭包并想检查func函数内部的提升。每次创建函数声明时,它都会将变量提升到顶部。为什么someFunction不吊?

Nic*_*ons 8

当你在return语句之后放置一个函数时,它不再是一个函数声明,而是一个函数表达式。与声明不同,函数表达式不会被提升。

与函数声明不同,JavaScript 中的函数表达式不会被提升。

- MDN


Nin*_*olz 6

您的statement 中有一个(命名的)函数表达式。这个函数不是一个函数语句,因此它没有被提升。return

另一个原因是,函数表达式没有名称。这意味着,您不能通过函数外部的名称访问它。函数表达式的名称仅在具有它名称的函数内部可用(例如用于递归)。