1.變數的提前編譯
showname();
/*變數提前*/
function showname()
注:在以上**中,第乙個輸出只是宣告了a,並沒有進行初始化賦值,因此其值為undefined,在這裡稱為預編譯。
2.函式的提前編譯
(1)如上**中的showname(),**從上向下執行,先執行showname(),但按理說這個方法在前面沒有,應該報錯,可是結果並不是這個。這說明直接把showname()這個函式體提前編譯,就能執行了。
(2)匿名函式不能進行提前編譯
m();
var m=function ()
說明:
(1)m此時被當做乙個變數提前編譯,變數加乙個括號為方法,但此時不認識m是乙個方法,因此不能進行提前編譯;
(2)若將m()放在下面執行,就可以拿到其輸出值
JS預編譯 函式預編譯和全域性預編譯
預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...
JS 函式預編譯
1 語法分析 2 預編譯 3 解釋執行 預編譯四部曲 1.函式在執行的瞬間,生成乙個執行期上下文 active object 簡稱ao 2.分析引數 2.1 函式接收形式引數,新增到ao的屬性,並且這個時候值為undefine,例如ao.age undefined 2.2 接收實參,新增到ao的屬性...
js 變數 函式提公升 與js的預編譯有關
參考 先簡單理解下作用域的概念,方便對變數與函式提公升的概念的理解 function foo console.log x foo 2 結果為2,可見js中並沒有塊級作用域的概念 可以使用下面的方法創造自己的作用域,這樣不會干擾到外部變數 function foo console.log x foo ...