1. 程式人生 > >js預編譯AO物件及GO物件

js預編譯AO物件及GO物件

簡單談一下js的預編譯過程。

function test(a,b){

    console.log(a)

    var a=123;

     function a(){}

    console.log(b)

    var b=234;

    console.log(b)

    function b(){}

    console.log(a)

    var b=function(){}

    console.log(b)

}

test(1)

我先說一下列印結果,結合例項給大家講一下我對預編譯的理解。

fn-a  fn-b 234 123 fn-b

首先js的執行過程會先掃描一下整體語法語句,如果存在邏輯錯誤或者語法錯誤,那麼直接報錯,程式停止執行,沒有錯誤的話,開始從上到下解釋一行執行一行。

但是js中首先你要清楚變數宣告和函式宣告是會提升的。

計算機執行到test()函式時,在執行的前一刻會建立一個ao物件。

ao{

}

這是第一步,建立一個ao物件,第二步是將函式內所有的形參和變數宣告儲存到ao物件中,value為undefined;

ao{

    a:undefined,

    b:undefined

}

第三步將形參和實參進行統一。

ao{

    a:1,

    b:undefined

}

第四步將所有的函式宣告的函式名作為ao物件中的key,函式整體內容作為value,儲存到ao物件中

ao{

    a:function(){},

    b:function(){}

}

之後開始列印的a,其實列印的就是ao物件中的a,然後a賦值123,在列印肯定就是123了,裡面細節有很多,但是整體步驟就是這些,適合有點基礎的前端看,用於給大家鞏固一下ao物件的執行過程,go物件同理,只是go指向的是window物件,其實window物件也就是go物件的意思了,只是少了形參和實參統一的步驟罷了。

有問題的話可以來本人個人部落格留言:http://www.funtechstudy.com/