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

问题描述 投票:0回答:1

根据吊装定义:

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

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

javascript ecmascript-5 hoisting function-expression javascript-function-declaration
1个回答
2
投票

根据 MDN

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

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

样品:

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

test();

© www.soinside.com 2019 - 2024. All rights reserved.