函数和变量的声明老是会被解析器悄悄地被“提高”到方法体的最顶部bash
为了更好的理解变量提高咱们看一段代码:函数
console.log(a);
var a = 2;
复制代码
控制台输出的是undefined,为何控制台没有报错而是输出undefined?spa
由于解析器会在函数开头处自动去声明局部变量,局部变量都会被放在函数的入口处定义,因此上面的代码实际会被解释成下面的代码:code
var a;
console.log(a);
var a = 2;
复制代码
函数声明也会提高的,可是函数表达式就不会提高,好比:cdn
fn1();
function fn1() {
console.log('我是函数fn1');
}
fn2();
var fn2 = function() {
console.log('我是函数fn2');
}
复制代码
控制台打印出以下:blog
综上所述:在Javascript中,变量的声明会被提高,而变量的赋值则不会。而函数的声明是函数的声明与函数体一块儿提高。ip