很早前就知道JavaScript语言有变量提升的特性,也有函数提升的特性(英文Hoisting),恰好今日的一个电话面试,面试官问道这个问题,暗自窃喜,然而没想到的是,他问我如果两者同时存在的时候,是先提升函数还是变量呢?一下就懵逼了,之前真没考虑过这个问题啊。。。

下来后,立即做了一个实验:

1
2
3
4
5
console.log(foo);
var foo = 'Hello World!';
function foo(){
//balabala...
}

或者

1
2
3
4
5
console.log(foo);
function foo(){
//balabala...
}
var foo = 'Hello World!';

结果打印出的都是function;

结论:由此可见,js中的函数或者变量提升特性,是先提升函数,再提升变量,(都是基础不扎实的锅啊😔)