今日面试题:变量提升 函数提升

60 阅读1分钟

题目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关键字声明的变量有变量提升功能。

什么是函数提升:可以先执行函数,再对函数进行声明。函数表达式必须先声明再使用。