首先我们需要理解什么是提升,在我们的js中,代码的执行时分两步走的,1、解析 2、一步一步执行
那么变量提升就是变量声明会被提升到作用域的最顶上去,也就是该变量不管是在作用域的哪个地方声明的,都会提升到作用域的最顶上去,同样函数提升也是这个道理。
1 变量提升
function test() {
console.log(a);
var a = 10;
}
test();//undefined
由于存在变量提升,在解析的时候a还未赋值所以出现输出undefined结果,上述代码执行过程实际上是这样:
function test() {
var a;
console.log(a);
a = 10;
}
test();//undefined
2 函数提升
在js中声明函数有函数声明式和函数表达式,下面是各种声明函数的对比:
// 函数声明
function foo() {
console.log('function declaration');
}
// 匿名函数表达式
var foo = function () {
console.log('anonymous function expression');
};
// 具名函数表达式
var foo = function bar() {
console.log('named function expression');
};
在此处我们需要记住的是只有函数声明式的函数存在提升,并且也将此函数的代码块一块提升,其他的函数声明方式,只是把foo变量进行了提升。