91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

javascript中預編譯指的是什么意思

發布時間:2022-03-10 12:01:34 來源:億速云 閱讀:159 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關javascript中預編譯指的是什么意思,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

在JavaScript中,預編譯就是代碼執行前進行的一項操作,會把變量聲明提前,函數聲明也提前,把這些按照一定的規則,放在創建的對象里面去的一個過程。

本教程操作環境:windows10系統、javascript1.8.5版、Dell G3電腦。

javascript中什么是預編譯

js運行三部曲

1.語法分析 : js引擎在解析js代碼之前,會先通篇掃描一下,找出低級的語法錯誤,比如寫錯大括號之類的。

2.預編譯 任何的語法和語句全部會被轉換成對象,GO(Global Object),AO(Active Object)把代碼按照 一定的規則,放到GO和AO中

3.解釋執行 編譯一行執行一行,當語法分析沒有問題,并且已經完成預編譯階段之后,就開始解釋執行代碼

什么的預編譯?

預編譯就是在JavaScript代碼前進行的一項操作會把變量聲明提前,函數聲明也提前,把這些代碼按照一定的規則,放在創建的對象里面去。

預編譯的過程:

GO window預編譯

1,在執行script標簽的一瞬間創建一個GO對象

2,尋找變量聲明,變量名作為GO對象的屬性名,值為undefined。

3,尋找函數聲明,函數名作為GO對象的屬性名,值為函數體,如果函數名和變量名一樣,直接覆蓋

AO 函數預編譯

1,在函數執行的一瞬間創建一個AO對象

2,尋找實參和形參,將形參作為AO對象的屬性名添加到對象中,值為實參,值得注意的是,函數聲明不叫變量。如果沒有實參值就是undefined。

3,尋找變量聲明,變量名作為AO對象的屬性名,值為undefined。如果變量名和形參名一樣不用管。

4 ,尋找函數聲明,函數名作為AO對象的屬性名,值為函數體,如果函數名和變量名一樣,直接覆蓋

下面我們來寫一段代碼來簡單介紹一哈函數預編譯的過程

function fun(a,b){
    console.log(a);
    var a = 10;
    console.log(a);
    function a(){}
    console.log(a)
    a = 1;
    var b;
    console.log(b);
    var b = function(){}
    console.log(b);
}
fun(1,2);

1首先在執行fun之前會創建一個AO對象。

funAO{
}

2,尋找實參和形參,將形參作為AO對象的屬性名添加到對象中,值為實參,值得注意的是,函數聲明不叫變量。如果沒有實參值就是undefined。

funAO{
    a : 1,
    b : 2
}

3,尋找變量聲明,變量名作為AO對象的屬性名,值為undefined。如果變量名和形參名一樣不用管

funAO{
    a : 1,
    b : 2
}

4 ,尋找函數聲明,函數名作為AO對象的屬性名,值為函數體,如果函數名和變量名一樣,直接覆蓋

funAO{
    a : function a(){},
    b : 2
}

解釋執行

function fun(a,b){
    console.log(a);  //往上面的AO對象里面尋找,a的值是function a(){}。 這里就輸出function a(){}
    var a = 10;
    console.log(a);//上面一行代碼把a賦值10 ,所以這里輸出10
    function a(){}
    console.log(a)//這里也是10,因為上面函數已經提前了
    a = 1;
    var b;
    console.log(b);//往上面的AO對象里面尋找,b的值是2。 這里就輸出2
    var b = function(){}//這里的函數為啥不能提前,因為這里的是一個函數表達式,這個函數沒有函數名所以不能提前。
    console.log(b);//這里把b賦值function(){},所以這里輸出function(){}
}
fun(1,2);

還有一種可能

function add(){
//這里的話碰到if判斷,for....除了function作用域之外的咱們都得正常分析,
//所以這里的值為undefined其實就是var a提前了賦值undefined
    console.log(a);//這里的輸出結果為?undefined
    if(a){
        var a = 10;
    }
    //這里是把a的值傳入判斷里面undefined返回的是false所以進不去,值就不會改變這里還是undefined
    console.log(a);//undefined
}
add();

這上面就是預編譯的執行過程!

關于“javascript中預編譯指的是什么意思”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

林西县| 红桥区| 涟水县| 上栗县| 如东县| 大兴区| 麻栗坡县| 荣昌县| 隆回县| 巴林右旗| 梅河口市| 谢通门县| 敦化市| 绍兴县| 顺平县| 深圳市| 宝兴县| 尚义县| 涡阳县| 封丘县| 邻水| 五华县| 塔城市| 石景山区| 霸州市| 顺昌县| 沭阳县| 海南省| 长葛市| 福安市| 铁岭县| 泽库县| 凤山县| 木兰县| 福贡县| 临沭县| 横山县| 平湖市| 佛山市| 博客| 漯河市|