题目1:
var foo = function () {
console.log('foo1');
}
foo(); // foo1
var foo = function () {
console.log('foo2');
}
foo(); // foo2
题目2:
function foo() {
console.log('foo1');
}
foo(); // foo2
function foo() {
console.log('foo2');
}
foo(); // foo2
为什么打印的结果不一样?
因为函数声明有函数提升功能。但是只有函数方法会提升,函数表达式不会提升。
什么是变量提升: 声明某个变量之后执行它,然后再赋值。执行的时候变量的值是再次赋值的值。变量随便是后面赋值的,却被提升了。效果就像是声明的语句全部都被提前到代码块前面了。只有var关键字声明的变量有变量提升功能。
什么是函数提升:可以先执行函数,再对函数进行声明。函数表达式必须先声明再使用。