为什么函数声明不能​​被吊起而函数表达式不能被吊起?

时间:2019-09-05 06:29:56

标签: javascript ecmascript-5 hoisting function-declaration function-expression

根据吊装定义:

  

提升是一种JavaScript机制,其中变量和函数   声明在执行代码之前移到其作用域的顶部

为什么函数声明不能​​被悬挂而函数表达式不能被悬挂?

1 个答案:

答案 0 :(得分:1)

根据MDN

  

例如,从概念上讲,对提升的严格定义表明,变量和函数声明实际上已移到代码的顶部,但这实际上不会发生。而是在编译阶段将变量和函数声明放入内存中,但仍保留在代码中键入它们的位置。

如您所见,在函数表达式中,实际函数是分配给命名变量的值。因此,该命名变量被悬挂。即使您分配了命名函数,它也不会被吊起,因为它不是声明,将在以后创建。

示例:

function test() {
  console.log(fn, foo);
  
  var fn = function foo() {}
}

test();