js拋不開的話題就是這個變量提升了,看了YDKJS關于這個的章節(jié),總結幾點。
1.聲明提升,賦值不提升,這其實表象來看的結果,其實質如下
alert(foo);
var foo = 1;
比如這兩行,結果是undefined,并不是1,就是因為編譯器把var foo = 1拆成了兩句話,一句var foo,一句foo = 1;
結果變成了
var foo;
alert(foo);
foo = 1;
2.函數(shù)提升 > 變量提升
alert(foo());
function foo(){
? ? return 1;
}
var foo = function(){
? ?return 1;
}
按照第一條的理論,還有慣性思維的判斷,后聲明后后提升,這個看起來應該是undefined,結果其實是1.
3.后聲明,后提升
alert(foo());
if(true){
? ? function foo(){ return 1;}
} else {
? ? function foo(){return 2;}
}
這個大家都覺得應該是1吧,其實不是,我們能得出這個結論,是因為我們在看代碼是使用的執(zhí)行視角,但是代碼在運行之前要用編譯器的視角來完成運行路線,所以在上面那段代碼中,編譯器會看到兩段聲明,第二段,覆蓋了第一段。
這就是神奇的js語言。