该题目来自一道很简单的面试题,怎么那么多人不会?
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。