錯(cuò)誤之處夷蚊,歡迎指正。
1. 概念簡(jiǎn)介
- 執(zhí)行上下文
是一個(gè)函數(shù)在運(yùn)行之前創(chuàng)建的一塊內(nèi)存空間髓介,這個(gè)空間有該函數(shù)運(yùn)行所依賴(lài)的數(shù)據(jù)惕鼓。 - 執(zhí)行上下文棧
是所有執(zhí)行上下文組成的空間,javascript
會(huì)始終執(zhí)行棧頂?shù)膱?zhí)行上下文唐础,直到全部執(zhí)行完畢箱歧。 - 全局執(zhí)行上下文
所有代碼執(zhí)行前,都必須有該環(huán)境一膨。 - 函數(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
- 首先全局執(zhí)行上下文入棧。
- 然后從上而下豹绪,開(kāi)始執(zhí)行代碼价淌,首先執(zhí)行
console.log('1')
,此時(shí)console.log('1')
入棧瞒津,打印出了1
蝉衣,然后出棧。 - 繼續(xù)向下執(zhí)行巷蚪,遇到了
a
的定義病毡,繼續(xù)向下執(zhí)行,遇到了a
的執(zhí)行屁柏。 - 此時(shí)
a
的執(zhí)行上下文入棧啦膜,首先執(zhí)行console.log('2')
有送,此時(shí)console.log('2')
入棧,打印出了2
僧家,然后出棧雀摘。 - 繼續(xù)向下執(zhí)行,遇到了
b
的定義八拱,繼續(xù)向下執(zhí)行阵赠,遇到了b
的執(zhí)行。 - 此時(shí)
b
的執(zhí)行上下文入棧乘粒,首先執(zhí)行console.log('3')
豌注,此時(shí)console.log('3')
入棧,打印出了3
灯萍,然后出棧轧铁。 - 此時(shí)
a
執(zhí)行完畢,a
的執(zhí)行上下文出棧旦棉。 - 繼續(xù)執(zhí)行全局上下文齿风,遇到了
console.log('4')
,此時(shí)console.log('4')
入棧绑洛,打印出了4
救斑,然后出棧。 - 此時(shí)全局上下文執(zhí)行完畢真屯,全局上下文出棧脸候,執(zhí)行上下文棧為空,執(zhí)行結(jié)束绑蔫。