亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JavaScript運行原理分析

2019-11-19 14:22:17
字體:
來源:轉載
供稿:網友

JavaScript是一種基于對象的動態、弱類型腳本語言(以下簡稱JS),是一種解釋型語言,和其他的編程語言不同,如java/C++等編譯型語言,這些語言在代碼執行前會進行通篇編譯,先編譯成字節碼(機器碼)。然后在執行。而JS不是這樣做的,JS是不需要編譯成中間碼,而是可以直接在瀏覽器中運行,JS運行過程可分為兩個階段,編譯和執行。(可參考你不知道的JS這本書),當JS控制器轉到一段可執行的代碼時(這段可執行代碼就是編譯階段生成的),會創建與之對應的執行上下文(Excution Context簡稱EC)。執行上下文可以理解為執行環境(執行上下文只能由JS解釋器創建,也只能由JS解釋器使用,用戶是不可以操作該‘對象'的)。

JS中的執行環境分為三類:

  • 全局環境:當JS引擎進入一個代碼塊時,如遇到<script>xxx</script>標簽,就是進入一個全局執行環境
  • 函數環境:當一個函數被調用時,在函數內部就形成了一個函數執行環境
  • eval():把字符串單做JS代碼執行,不推薦使用

在一段JS代碼中可能會產生多個執行上下文,在JS中用棧這種數據結構來管理執行上下文,棧的特點是“先進后出,后進先出”,這種棧稱之為函數調用棧。

執行上下文的特點

  • 棧底永遠是全局執行上下文,有且僅有一個
  • 全局執行上下文只有在瀏覽器關閉時,才會彈出棧
  • 其他的執行上下文的數量沒有限制
  • 棧頂永遠是當前活動執行上下文,其余的都處于等待狀態中,一旦執行完畢,立即彈出棧,然后控制權交回下一個執行上下文
  • 函數只有在每次被調用時,才會為其創建執行上下文,函數被聲明時是沒有的。

執行上下文可以形象的理解為一個普通的JS對象,一個執行上下文的生命周期大概包含兩個階段:

創建階段

此階段主要完成三件事件,1、創建變量對象 2、建立作用域鏈 3、確定this指向

執行階段

此階段主要完成變量賦值、函數調用、其他操作

變量對象(VO)的創建過程

  • 1、根據函數參數,創建并初始化arguments對象,給arguments對象添加屬性"0","1","2","3"等屬性,其初始值為undefined,并設置arguments.length值為實際傳入參數的個數。
  • 2、查找function函數聲明,在變量對象上添加屬性,屬性名就是函數名,屬性值就是函數的引用值,如果已經存在同名的,則直接覆蓋
  • 3、查找var變量聲明(查找變量時,會把函數的參數等價于var聲明,所以在VO中也會添加和參數名一樣的屬性,初始值也是undefined),在變量對象添加屬性,屬性名就是變量名,屬性值是undefined,如果已經存在同名的,則不處理

如果存在同名標識符(函數、變量),則函數可以覆蓋變量,函數的優先級高于變量

變量對象(OV)和激活對象(AO)是同一個東西,在不同時期的兩種叫法。在創建時期叫變量對象,在執行時期叫激活對象

以如下代碼為例

var g_name="tom";var g_age=20;function g_fn(num){ var l_name="kity"; var l_age=18; function l_fn(){  console.log(g_name + '===' + l_name + '===' + num); }}g_fn(10);

編譯階段

當JS控制器轉到這一段代碼時,會創建一個執行上下文,G_EC

執行上下文的結構大概如下:

G_EC = { VO   : {}, Scope_chain : [], this  : {}}/* VO的結構大概 */VO = { g_name : undefined, g_age : undefined, g_fn : <函數在內存中引用值>}/* Scope_chain的大概結構如下 */Scope_chain = [ G_EC.VO ] // 數組中第一個元素是當前執行上下文的VO,第二個是父執行上下文的VO,最后一個是全局執行上下文的VO,在執行階段,會沿著這個作用域鏈一個一個的查找標識符,如果查到則返回,否知一直查找到全局執行上下文的VO/* this */this = undefined // 此時this的值是undefined

執行上下文一旦創建完畢,就立馬被壓入函數調用棧中,此時解釋器會悄悄的做一件事情,就是給當前VO中的函數添加一個內部屬性[[scope]],該屬性指向上面的作用域鏈。

g_fn.scope = [ global_EC.VO ] // 該scope屬性只能被JS解釋器所使用,用戶無法使用

執行階段

一行一行執行代碼,當遇到一個表達式時,就會去當前作用域鏈的中查找VO對象,如果找到則返回,如果找不到,則繼續查找下一個VO對象,直至全局VO對象終止。

此階段可以有變量賦值,函數調用等操作,當解釋器遇到g_fn()時,就知道這是一個函數調用,然后立即為其創建一個函數執行上下文,fn_EC,該上下文fn_EC同樣有兩個階段

分別是創建階段和執行階段。

在創建階段,對于函數執行上下文,在創建變量對象時,會多創建一個arguments對象,然后為arguments對象添加屬性:"0","1", "2"其初始值為undefined,

  • 查找function函數聲明
  • 查找var變量聲明
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩欧美一二三区| 亚洲性生活视频| 国产精品99久久久久久久久久久久| 久久久精品免费视频| 国产精品免费一区二区三区都可以| 久久成人这里只有精品| 亚洲另类图片色| 国产精品久久久久久久app| 国模叶桐国产精品一区| 日韩精品在线免费播放| 久久久国产精彩视频美女艺术照福利| 国产亚洲视频在线| 欧美亚洲成人精品| 成人妇女淫片aaaa视频| 狠狠躁夜夜躁人人爽超碰91| 日韩中文字幕国产| 亚洲第一网中文字幕| 亚洲国产精品国自产拍av秋霞| 日韩中文在线中文网在线观看| 成人国产精品一区| 国产成人中文字幕| 精品网站999www| 欧美激情网站在线观看| 欧美高清不卡在线| 国产91色在线| 亚洲精品不卡在线| 久久国产一区二区三区| 97香蕉超级碰碰久久免费软件| 午夜精品视频在线| 国产精品吴梦梦| 欧美夜福利tv在线| 8090理伦午夜在线电影| 国产精品丝袜视频| 日韩激情av在线免费观看| 亚洲天堂开心观看| 国产成人一区二区三区| 亚洲精品久久久久久久久久久久久| 少妇高潮久久久久久潘金莲| 在线日韩精品视频| 亚洲色无码播放| 久久精品这里热有精品| 国产一区二中文字幕在线看| 黄色精品在线看| 日韩一区二区精品视频| 精品国产拍在线观看| 欧美日韩在线一区| 欧美激情视频播放| 亚洲影院污污.| 国产精品亚洲аv天堂网| 亚洲在线视频观看| 久久久国产精彩视频美女艺术照福利| 尤物精品国产第一福利三区| 日韩暖暖在线视频| 中文字幕精品在线| 亚洲新声在线观看| www.日本久久久久com.| 日韩大陆欧美高清视频区| 国产精品视频区1| 7777精品久久久久久| 欧美另类交人妖| 国产精品直播网红| 亚洲欧美中文日韩v在线观看| 成人国内精品久久久久一区| 亚洲国产高清高潮精品美女| 欧美色视频日本高清在线观看| 亚洲精品美女在线观看播放| 国产精品偷伦视频免费观看国产| 亚洲xxx自由成熟| 精品久久久久久久久久久久久久| 精品欧美一区二区三区| 日韩风俗一区 二区| 亚洲精品99999| 久久中文久久字幕| 亚洲欧美日韩天堂一区二区| 国产亚洲精品成人av久久ww| 国产精品 欧美在线| 亚洲国产成人爱av在线播放| 91精品综合久久久久久五月天| 色中色综合影院手机版在线观看| 欧美成人免费观看| 国产精品777| 久久亚洲精品一区二区| 91国内产香蕉| 国产视频在线一区二区| 久久免费少妇高潮久久精品99| 欧美国产精品人人做人人爱| 国产精品视频网址| 亚洲成人精品视频| 77777少妇光屁股久久一区| 午夜精品一区二区三区av| 久久视频免费在线播放| 夜夜狂射影院欧美极品| 久久久久久网站| 久久成人在线视频| 欧美国产日韩中文字幕在线| 亚洲福利在线观看| 久久99亚洲精品| 亚洲精品第一页| 亚洲成人黄色在线| 亚洲精品xxx| www国产亚洲精品久久网站| 91精品国产综合久久香蕉| 久久久国产精品视频| 国产成人精品一区二区在线| 久久精品国产亚洲精品2020| 国产一区二区在线免费| 久久精品久久久久| 亚洲精品视频久久| 国产精品中文久久久久久久| 国产精品久久久久不卡| 欧美另类69精品久久久久9999| 欧美极品少妇xxxxⅹ免费视频| 亚洲成人免费网站| 福利微拍一区二区| 久久久噜噜噜久久中文字免| 亚洲美女www午夜| 亚洲综合最新在线| 成人久久一区二区三区| 精品视频在线播放| 日韩精品在线免费| 国产精品免费电影| 亚洲深夜福利视频| 国产成人综合精品| 91精品国产色综合| 国产a级全部精品| 麻豆国产va免费精品高清在线| 日韩中文综合网| 色噜噜久久综合伊人一本| 成人网中文字幕| 国产精品一区=区| 日韩av在线精品| 在线观看精品国产视频| 亚洲精品国产精品自产a区红杏吧| 国产精品福利在线观看网址| 亚洲精品98久久久久久中文字幕| 欧美与欧洲交xxxx免费观看| www.xxxx精品| 97av在线视频免费播放| 亚洲欧美综合区自拍另类| 国产亚洲精品高潮| 美女少妇精品视频| 午夜精品福利电影| 午夜精品久久久久久久白皮肤| 中文字幕自拍vr一区二区三区| 国产成人avxxxxx在线看| 97视频在线观看视频免费视频| 国产精品午夜一区二区欲梦| 欧美成人性色生活仑片| 在线激情影院一区| 91av在线播放| 久久精品国产亚洲| 日韩欧美一区二区三区| 国产一区二区视频在线观看| 91精品在线一区| 国产成人综合av| 欧美日韩亚洲91| 久久精品91久久香蕉加勒比| 日韩国产精品一区| 欧美疯狂做受xxxx高潮| 日韩欧美国产骚| 免费不卡欧美自拍视频| 日韩一区二区欧美| 91亚洲人电影| 亚洲国产精品高清久久久|