成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js預(yù)編譯過程

FWHeart / 2753人閱讀

摘要:所以變量聲明提升和函數(shù)聲明提升會出現(xiàn)一個先后順序預(yù)編譯過程結(jié)束。

先科普:

1.javaScript是解釋型語言,就是編譯一行,執(zhí)行一行.....
2.javaScript沒有塊級及作用域......
3.javaScript具有變量和函數(shù)聲明提升功能.....
4.AO對象和GO對象....
5.預(yù)編譯就是解決代碼執(zhí)行順序問題,與java語言類似(jvm)....

例如:

(function(a){
console.log(a);
var a = 12;
console.log(a);
function a(){...}
console.log(a);
var b = function(){...}
console.log(b);
function d(){...}
})(1);

1.首先創(chuàng)建一個GO對象,和AO對象....[因為該立即執(zhí)行函數(shù)是在全局作用域中執(zhí)行的,立即執(zhí)行函數(shù)執(zhí)行時創(chuàng)建AO對象]

GO{
   AO{
       
   } 
}

2.找形參和變量聲明,將變量和形參名作為AO屬性名,值為undefined....【變量聲明找到了a和b,其實形參也是一種變量聲明,類似于function(a,b){var a,b;},這里的形參和函數(shù)里的變量聲明a重名了,那么后一個變量聲明會被忽略...】

GO{
    AO{
       a: undefined,
       b: undefined 
    }
}

3.將實參和形參統(tǒng)一......【實參值賦值給形參】

GO{
    AO{
        a: 1,
        b: undefined
    }
}

4.在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體....【記住,一定是變量聲明在前,函數(shù)聲明在后。所以變量聲明提升和函數(shù)聲明提升會出現(xiàn)一個先后順序】

GO{
    AO{
        a: function(){...},
        b: undefined,
        d: function(){...}
    }
}

預(yù)編譯過程結(jié)束。

然后開始執(zhí)行:

1.執(zhí)行第一行:輸出function(){...}
2.執(zhí)行第二行賦值:

GO{
    AO{
        a: 12,
        b: undefined,
        d: function(){...}
    }
}

3.執(zhí)行第三行:輸出12
4.第四行是函數(shù)聲明,預(yù)編譯已經(jīng)執(zhí)行了,跳過,執(zhí)行第五行,輸出:12
5.執(zhí)行第六行賦值:

GO{
    AO{
        a: 12,
        b: function(){...},
        d: function(){...}
    }
}

6.執(zhí)行第七行:輸出:function(){...}
7.第八行是函數(shù)聲明,跳過,執(zhí)行完成...接下來銷毀AO,再銷毀GO【這里是一個js垃圾清理過程,無關(guān)本話題】

例如:
作用域鏈......
自己本身屬性找不到就會去查找上一級的作用域中的屬性...層層迭代查詢
直到查到為止....
js是根據(jù)一個叫[[scope]]的屬性查找的,[[scope]]是任何函數(shù)(作用域都存在)都默認(rèn)自帶的屬性,它保存了一個數(shù)組值,長度是父級的總長度(作用域包裹的層級,長度至少為1),直到window為止,如果查不到,彈出錯誤...
首先[[scope]][0]保存自身預(yù)編譯AO,先查找[[scope]][0],保存了該AO或者GO....
不存在時查找[[scope]][1]...
...
注意:[[scope]]屬性不可枚舉,無法訪問...

例如:
call和apply擴(kuò)展了作用域....
apply方法可以‘借用’其他對象中的方法(簡稱A)完成屬于自己的任務(wù),A只是暫時用于自身,其本身還是別人的,你不可以去修改A中的代碼,也無法修改...
在你調(diào)用A時,apply中this指向了自身,可以這樣理解:我使用了你的方法,方法里的this指向了我,我的屬性(方法)增加了一項(擴(kuò)展了我的作用域),但是一旦退出apply時(執(zhí)行完成后),方法依然要還給你,this指向還是你,我的作用域回歸原樣....

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94540.html

相關(guān)文章

  • javascript引擎執(zhí)行的過程的理解--語法分析和預(yù)編譯階段

    摘要:所以覺得把這個執(zhí)行的詳細(xì)過程整理一下,幫助更好的理解。類似的語法報錯的如下圖所示三預(yù)編譯階段代碼塊通過語法分析階段之后,語法都正確的下回進(jìn)入預(yù)編譯階段。另開出新文章詳細(xì)分析,主要介紹執(zhí)行階段中的同步任務(wù)執(zhí)行和異步任務(wù)執(zhí)行機(jī)制事件循環(huán)。 一、概述 js是一種非常靈活的語言,理解js引擎的執(zhí)行過程對于我們學(xué)習(xí)js是非常有必要的??戳撕芏噙@方便文章,大多數(shù)是講的是事件循環(huán)(event loo...

    molyzzx 評論0 收藏0
  • javascript系列--javascript引擎執(zhí)行的過程的理解--語法分析和預(yù)編譯階段

    摘要:所以覺得把這個執(zhí)行的詳細(xì)過程整理一下,幫助更好的理解。類似的語法報錯的如下圖所示三預(yù)編譯階段代碼塊通過語法分析階段之后,語法都正確的下回進(jìn)入預(yù)編譯階段。另開出新文章詳細(xì)分析,主要介紹執(zhí)行階段中的同步任務(wù)執(zhí)行和異步任務(wù)執(zhí)行機(jī)制事件循環(huán)。 一、概述 js是一種非常靈活的語言,理解js引擎的執(zhí)行過程對于我們學(xué)習(xí)js是非常有必要的??戳撕芏噙@方便文章,大多數(shù)是講的是事件循環(huán)(event loo...

    malakashi 評論0 收藏0
  • JavaScript的預(yù)編譯過程分析

    摘要:一概念是一個單線程解釋型的編程語言。預(yù)編譯大致可分為步創(chuàng)建對象找形參和變量聲明,將形參和變量名作為屬性名,值為將實參值和形參統(tǒng)一在函數(shù)體里面找函數(shù)聲明,值賦予函數(shù)體。 一、JavaScript概念 JavaScript ( JS ) 是一個單線程、解釋型的編程語言。 二、JavaScript語言特點(diǎn) 2.1 單線程 JavaScript語言的一大特點(diǎn)就是單線程,也就是說,同一個時間只能...

    graf 評論0 收藏0
  • JS代碼運(yùn)行過程簡述(一)

    摘要:是動態(tài)語言,任何一段代碼在執(zhí)行之前都需要編譯,它跟傳統(tǒng)的語言不同,它不是提前編譯的,編譯結(jié)果也不能在分布式系統(tǒng)中進(jìn)行移植。通過特定方法將的轉(zhuǎn)化為一組機(jī)器指令,用來創(chuàng)建一個叫作的變量包括內(nèi)存分配等,并將一個值存儲到中。 JS 是動態(tài)語言,任何一段代碼在執(zhí)行之前都需要編譯,它跟傳統(tǒng)的語言不同,它不是提前編譯的,編譯結(jié)果也不能在分布式系統(tǒng)中進(jìn)行移植。 但是JS引擎進(jìn)行編譯的步驟和傳統(tǒng)的編譯...

    April 評論0 收藏0
  • JavaScript-預(yù)編譯

    摘要:預(yù)編譯發(fā)生在函數(shù)執(zhí)行前也就是說函數(shù)執(zhí)行時,預(yù)編譯已經(jīng)結(jié)束。五總結(jié)理解預(yù)編譯需要明白變量函數(shù)聲明和變量賦值。預(yù)編譯階段,只進(jìn)行變量函數(shù)聲明,不會進(jìn)行變量的初始化即變量賦值,所有變量的值都是變量賦值是在解釋執(zhí)行階段才進(jìn)行的。 一、JS的概念 JavaScript ( JS ) 是一種具有函數(shù)優(yōu)先的輕量級解釋型或即時編譯型的編程語言。 二、JS語言特點(diǎn) 2.1 單線程 (1)JavaScri...

    Aldous 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<