Skip to content

下面代码会输出什么?

Posted on:2024年7月20日 at 10:39
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);
};

以下是代码的执行过程:

  1. 首先,函数 foo 的函数声明被提升到作用域的顶部。所以,在调用 foo() 之前,函数 foo 已经可用。

2.然后,变量 foo 被声明,并且由于它已经被函数 foo 的定义所覆盖,因此这个变量声明没有改变函数 foo 的值。

  1. 接下来,函数 foo 被调用,输出结果为 1

  2. 最后,变量 foo 被重新赋值为一个新的函数表达式,该函数输出结果为 2

所以,最终输出结果为:

1
原文转自:https://fe.ecool.fun/topic/7625104a-b9e7-4cab-915a-d1cccfa31d5c