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