声明在编译阶段即会执行,故其被提升了,而赋值将留在原位等待执行。
haha();
function haha(){
console.log('haha');
}
// 这段代码将输出: haha
console.log(a);
var a = 123;
// 这段代码将报错: undefined
以伪代码分别表示上面两段代码的预编译形式:
function haha(){
console.log('haha');
};
haha();
var a;
console.log(a);
a = 123;
这个东西就是偏理论派,面试的时候很可能会问到,但实际应用很少(谁这样写,我去拍死他)。