jS的執(zhí)行環(huán)境以及作用域?yàn)g覽器的回收機(jī)制

執(zhí)行環(huán)境(execution context)是JS一個(gè)非常重要的概念。

執(zhí)行環(huán)境定義了變量或函數(shù)有權(quán)訪問的其他數(shù)據(jù)決定了他們的各自的行為,每個(gè)執(zhí)行環(huán)境等都有與之關(guān)聯(lián)的的:變量對(duì)象(variable object),環(huán)境中定義的所有{變量}和{函數(shù)}都保存在這個(gè)對(duì)象中。(JS是無法讀取內(nèi)存的)我們編寫的代碼無法訪問這個(gè)對(duì)象 但是解析器會(huì)在處理數(shù)據(jù)的時(shí)候后臺(tái)使用它


全局執(zhí)行環(huán)境

JS宿主:運(yùn)行的平臺(tái)(他是腳本語言嗎所以你懂得)

由于JS實(shí)現(xiàn)的宿主環(huán)境不同, 表示執(zhí)行環(huán)境也不一樣

web瀏覽器中全局---------window對(duì)象 知道了這個(gè)那么天天使用的變量啊,函數(shù)啊的全局 都是作為window對(duì)象的屬性和方法創(chuàng)建的

環(huán)境銷毀:

某個(gè)執(zhí)行環(huán)境所有代碼執(zhí)行完之后 該環(huán)境被銷毀 保存在其中的所有變量和函數(shù)定義也隨之銷毀(這個(gè)全局也就是關(guān)了瀏覽器或者程序的時(shí)候才被銷毀 )

局部執(zhí)行環(huán)境

棧:每個(gè)函數(shù)都有自己的執(zhí)行環(huán)境 當(dāng)執(zhí)行流進(jìn)入函數(shù)時(shí),函數(shù)的環(huán)境就被推入一個(gè)環(huán)境棧中

而在函數(shù)執(zhí)行之后,將其環(huán)境彈出, 把控制權(quán)返回之前的執(zhí)行環(huán)境-----------------ECMAScript中的執(zhí)行流(從上到下執(zhí)行)真有這個(gè)方便的機(jī)制控制著

環(huán)境執(zhí)行(作用域鏈)

當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對(duì)象的一個(gè)----------作用域鏈
用途:保證對(duì)執(zhí)行環(huán)境的有權(quán)訪問的所有變量和函數(shù)的有序訪問(上面執(zhí)行環(huán)境的概念)作用于鏈的前端-----始終是當(dāng)前執(zhí)行代碼所在環(huán)境的變量對(duì)象(就是正在執(zhí)行的代碼 現(xiàn)在執(zhí)行的位置)
比如環(huán)境是函數(shù) 那么將其活動(dòng)對(duì)象最為變量對(duì)象 活動(dòng)對(duì)象在開始只包含一個(gè)變量 即{arguments對(duì)象}(注意全局環(huán)境中不存在arguments)那么作用域的下一個(gè)變量對(duì)象來自包含來自(外部)環(huán)境 ,而下一個(gè)則是來自下一個(gè)包含環(huán)境 這樣一直延續(xù)到全局執(zhí)行環(huán)境; 全局環(huán)境始終是作用域鏈的最后一個(gè)對(duì)象(web瀏覽器中即是window)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容