【问题标题】:Why function aren't hoisted after return statement?为什么函数在 return 语句后没有被提升?
【发布时间】:2020-10-02 16:11:34
【问题描述】:
const func = () => {
  someFunction() // error here
  
  return function someFunction() {
    console.log('hello')
  }
}

func()

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

【问题讨论】:

标签: javascript


【解决方案1】:

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

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

-MDN

【讨论】:

    【解决方案2】:

    您的return statement 中有一个(命名的)function expression。这个函数不是function statement,因此它没有被提升。

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

    【讨论】: