0

根据吊装定义:

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

为什么函数声明会被提升而函数表达式不会?

4

1 回答 1

2

根据MDN

例如,从概念上讲,提升的严格定义表明变量和函数声明在物理上移动到代码的顶部,但实际上并非如此。相反,变量和函数声明在编译阶段被放入内存,但准确地保留在您在代码中键入它们的位置。

如您所见,在函数表达式中,实际函数是分配给命名变量的值。所以这个命名变量被提升了。即使您分配了一个命名函数,它仍然不会被提升,因为它不是一个声明并且将在以后创建。

样本:

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

test();

于 2019-09-05T06:44:39.073 回答