该题目来自一道很简单的面试题,怎么那么多人不会?

var foo = function () {
    console.log("foo1")
}
foo()

var foo = function () {
    console.log("foo2")
}
foo()

function foo() {
    console.log("foo1")
}
foo()

function foo() {
    console.log("foo2")
}
foo()

打印结果如下:

foo1
foo2
foo2
foo2

在这个例子中函数表达式和函数声明是互不影响的

第一个打印foo1;

接着执行第二个foo的调用,由于函数作用域的特性,后面定义的函数将覆盖前面定义的函数。
由于在调用函数之前就进行了函数的重新定义,所以会打印foo2;

接下来第三个和第四个都是函数声明,会进行函数提升,第四个函数会覆盖掉第三个函数,所以第三次调用会打印foo2,第四次调用同样还是打印foo2。

最后修改:2023 年 05 月 26 日
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!