執(zhí)行上下文

錯誤之處,歡迎指正。


1. 概念簡介

  1. 執(zhí)行上下文
    是一個函數(shù)在運(yùn)行之前創(chuàng)建的一塊內(nèi)存空間,這個空間有該函數(shù)運(yùn)行所依賴的數(shù)據(jù)。
  2. 執(zhí)行上下文棧
    是所有執(zhí)行上下文組成的空間,javascript會始終執(zhí)行棧頂?shù)膱?zhí)行上下文,直到全部執(zhí)行完畢。
  3. 全局執(zhí)行上下文
    所有代碼執(zhí)行前,都必須有該環(huán)境。
  4. 函數(shù)執(zhí)行上下文
    被執(zhí)行的函數(shù)創(chuàng)建的一塊內(nèi)存空間。

2. 例題

console.log('1');
function a() {
    console.log('2');
    function b() {
        console.log('3');
    }
    b();
}
a();
console.log('4');
//輸出結(jié)果1 2 3 4
  1. 首先全局執(zhí)行上下文入棧。
  2. 然后從上而下,開始執(zhí)行代碼,首先執(zhí)行console.log('1'),此時console.log('1')入棧,打印出了1,然后出棧。
  3. 繼續(xù)向下執(zhí)行,遇到了a的定義,繼續(xù)向下執(zhí)行,遇到了a的執(zhí)行。
  4. 此時a的執(zhí)行上下文入棧,首先執(zhí)行console.log('2'),此時console.log('2')入棧,打印出了2,然后出棧。
  5. 繼續(xù)向下執(zhí)行,遇到了b的定義,繼續(xù)向下執(zhí)行,遇到了b的執(zhí)行。
  6. 此時b的執(zhí)行上下文入棧,首先執(zhí)行console.log('3'),此時console.log('3')入棧,打印出了3,然后出棧。
  7. 此時a執(zhí)行完畢,a的執(zhí)行上下文出棧。
  8. 繼續(xù)執(zhí)行全局上下文,遇到了console.log('4'),此時console.log('4')入棧,打印出了4,然后出棧。
  9. 此時全局上下文執(zhí)行完畢,全局上下文出棧,執(zhí)行上下文棧為空,執(zhí)行結(jié)束。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容