执行结果是多少, 为什么?
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
原因:
首先,变量foo被赋值为一个函数表达式function () { console.log("foo1") },然后立即调用foo(),输出结果为foo1。
接下来,变量foo再次被赋值为另一个函数表达式function () { console.log("foo2") },然后再次调用foo(),输出结果为foo2。
然后,函数声明function foo() { console.log("foo1") }被解析并提升到作用域的顶部,但由于变量foo已经被重新赋值为函数表达式,因此这个函数声明不会对变量foo产生影响。
最后,另一个函数声明function foo() { console.log("foo2") }也被解析并提升到作用域的顶部。然后再次调用foo(),由于变量foo指向最后一个函数声明,输出结果为foo2。这也说明了后面的函数声明覆盖了前面的函数声明。