【发布时间】:2022-01-14 23:34:27
【问题描述】:
我以为我掌握了提升的概念,但下面的代码让我感到困惑。它如何返回 1?第二个 example() 函数会被提升到第一个之上吗?
function example() {
return 9;
}
console.log(example());
function example() {
return 1;
}
如果函数声明在编译阶段被提升并且函数表达式在执行阶段被执行。下面的代码怎么会返回 7?仅仅是因为先声明了示例表达式吗?
var example = function() {
return 7;
}
console.log(example());
function example() {
return 0;
}
提前谢谢你!
【问题讨论】:
-
只是将每个
function example声明隐式移动到代码的顶部;替换任何以前的同名function。 其他所有事情,包括var example = ...,都会在之后发生。这就是提升,完美地解释了这种行为。 -
所以替换发生了?在第一个示例中,值为 9 的
function example()...将首先被提升,然后值为 1 的function example()...将替换它,对吗?在第二个例子中,我们首先提升function example() ...,然后当var example = ...执行时,它将替换提升的那个,因此返回7。我理解对了吗?如果我错了,请纠正我。 -
@deceze 虽然你在技术上是正确的(最好的一种正确!),但你说的好像
var没有被提升,它确实如此。我认为更好的答案是函数在 vars 之前被提升。 stackoverflow.com/a/28246653/1497533
标签: javascript hoisting executioncontext