js概念一:調(diào)用堆棧

步驟:當(dāng)腳本調(diào)用函數(shù)時,解釋器將其添加到調(diào)用堆棧,然后開始執(zhí)行該函數(shù)。

當(dāng)函數(shù)調(diào)用的任何函數(shù)都會進(jìn)一步添加到調(diào)用堆棧中,并在其調(diào)用的位置運(yùn)行。

當(dāng)前函數(shù)執(zhí)行完之后,解釋器將其從堆棧中取出并從最后一個代碼清單中從中斷處繼續(xù)執(zhí)行。

如果堆棧占用的空間超過了分配給他的空間,出現(xiàn)堆棧溢出的錯誤。

example:

functiongreeting(){

// [1] Some codes

?heresayHi();

// [2] Some codes here

}

function sayHi()

{return"Hi!";}

// Invoke the `greeting`?

function greeting();

// [3] Some codes here

上面的代碼將執(zhí)行如下:

忽略所有函數(shù),直到它到達(dá)greeting()?函數(shù)調(diào)用。

將`greeting`函數(shù)添加到調(diào)用堆棧列表中。

執(zhí)行`greeting`函數(shù)中的所有代碼行。

進(jìn)入sayHi()函數(shù)調(diào)用。

將該sayHi()函數(shù)添加到調(diào)用堆棧列表中。

執(zhí)行sayHi()函數(shù)內(nèi)的所有代碼行,直到結(jié)束。

將執(zhí)行返回到調(diào)用的行sayHi()并繼續(xù)執(zhí)行g(shù)reeting()函數(shù)的其余部分。

sayHi()從我們的調(diào)用堆棧列表中刪除該函數(shù)。

當(dāng)greeting()函數(shù)內(nèi)部的所有內(nèi)容都被執(zhí)行后,返回其調(diào)用行繼續(xù)執(zhí)行其余的JS代碼。

greeting()從調(diào)用堆棧列表中刪除該函數(shù)。

我們從一個空的調(diào)用堆棧開始,每當(dāng)我們調(diào)用一個函數(shù)時,它會自動添加到調(diào)用堆棧中,在執(zhí)行所有代碼后,它會自動從調(diào)用堆棧中刪除。最后,我們最終得到了一個空堆棧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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