1.变量的提前编译
showname();
/*变量提前*/
function showname(){
console.log(a); //undefined
var a=10;
console.log(a); //10
}
注:在以上代码中,第一个输出只是声明了a,并没有进行初始化赋值,因此其值为undefined,在这里称为预编译。
2.函数的提前编译
(1)如上代码中的showname(),代码从上向下执行,先执行showname(),但按理说这个方法在前面没有,应该报错,可是结果并不是这个。这说明直接把showname()这个函数体提前编译,就能执行了。
(2)匿名函数不能进行提前编译
m();
var m=function (){
console.log("匿名函数"); //error:m is not a function
}
说明:
(1)m此时被当做一个变量提前编译,变量加一个括号为方法,但此时不认识m是一个方法,因此不能进行提前编译;
(2)若将m()放在下面执行,就可以拿到其输出值