根据吊装定义:
提升是一种 JavaScript 机制,其中变量和函数 在代码执行之前声明被移动到其作用域的顶部
为什么函数声明会被提升而函数表达式却不会?
根据 MDN,
例如,从概念上讲,提升的严格定义表明变量和函数声明在物理上移动到代码的顶部,但实际上并非如此。相反,变量和函数声明会在编译阶段放入内存中,但保留在您在代码中键入它们的位置。
如您所见,在函数表达式中,实际函数是分配给命名变量的值。所以这个命名变量被提升了。即使您分配了命名函数,它仍然不会被提升,因为它不是声明,并将在稍后创建。
样品:
function test() {
console.log(fn, foo);
var fn = function foo() {}
}
test();