上面這段代碼中,函數聲明在函數調用下,爲何會調用成功呢?函數
hello(); function hello(){alert("hello");}
由於js在編譯階段預解析,將上面這段代碼轉換成:spa
var hello = function(){alert('hello');}; hello();
只有函數聲明纔會被提高,函數表達式在預解析階段不會被提高。code
再看一個案例:blog
var a=1; function hello(){ console.info(a); var a=2; }
執行結果爲何是undefined呢?io
由於在預解析階段,代碼被轉換成下面:console
var a=1; function hello(){ var a; console.info(a); a=2; }
因此執行結果是undefined編譯
這就是爲何js函數中變量聲明建議寫在最前面:function
function hello(){ var a=1,b=2; console.info(a); }