foo();
var foo;
function foo() {
console.log(1);
}
foo = function () {
console.log(2);
};
答案是:1
函数声明和变量声明都会被提升,但是有一个值得注意的细节,那就是,函数会首先提升,然后才是变量!
根据 JavaScript 的变量和函数提升规则,上述代码在执行时会被解析成以下形式:
function foo() {
console.log(1);
}
var foo; // 变量声明被提升至顶部
foo(); // 输出 1
foo = function () {
console.log(2);
};
以下是代码的执行过程:
- 首先,函数
foo
的函数声明被提升到作用域的顶部。所以,在调用foo()
之前,函数foo
已经可用。
2.然后,变量 foo
被声明,并且由于它已经被函数 foo
的定义所覆盖,因此这个变量声明没有改变函数 foo
的值。
-
接下来,函数
foo
被调用,输出结果为1
。 -
最后,变量
foo
被重新赋值为一个新的函数表达式,该函数输出结果为2
。
所以,最终输出结果为:
1