javascript
slf4j 如何返回堆栈_重学JS系列 - JS 调用堆栈
什么是 JavaScript 調(diào)用棧,為什么它是必要的?
JavaScript 引擎是一個單線程解析器,而單線程解析器由堆和單一調(diào)用棧組成。瀏覽器提供 Web APIs,比如:DOM,AJAX 和 定時器。
本文旨在說明什么是調(diào)用堆棧以及為什么需要調(diào)用棧?對調(diào)用棧的理解有助于我們更加清晰的知道 函數(shù)的的層次結(jié)構(gòu)和執(zhí)行順序 在 JavaScript 的引擎中工作方式。
調(diào)用堆棧主要用于函數(shù)調(diào)用,由于 調(diào)用堆棧是單個的,因此函數(shù)的執(zhí)行從上到下一次性完成。這意味著調(diào)用棧是同步的。
對調(diào)用棧的理解對于異步編程至關(guān)重要,后面我們會介紹。
在異步 JavaScript 中,我們有一個回調(diào)函數(shù),一個事件循環(huán)隊列和一個任務(wù)執(zhí)行隊列。在事件循環(huán)將回調(diào)函數(shù) 推到堆棧之后,回調(diào)函數(shù)將在執(zhí)行期間由調(diào)用堆棧執(zhí)行。
在此之前,讓我們嘗試著回答什么是調(diào)用張?
在最基本的級別上,調(diào)用棧是一種數(shù)據(jù)結(jié)構(gòu),它使用后進(jìn)先出(LIFO)原理臨時存儲 和管理函數(shù)調(diào)用。
讓我們打破之前的定義:
LIFO:當(dāng)我們說調(diào)用堆棧是按照后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)原理進(jìn)行操作時,這意味著當(dāng)函數(shù)返回時,被壓入堆棧的最后一個函數(shù)是第一個彈出的函數(shù)。
讓我們通過堆棧跟蹤錯誤打印到控制臺來掩飾 LIFO 的代碼示例:
function firstFunction(){throw new Error('Stack Trace Error'); }function secondFunction(){firstFunction(); }function thirdFunction(){secondFunction(); }thirdFunction();在瀏覽器控制臺運(yùn)行代碼,我們會打印出此下錯誤信息,會打印出一個堆棧跟蹤,說明如何將功能堆疊在一起,看一下該圖:
你會注意到,函數(shù)作為堆棧的排序開始于 firstFunction() 這是進(jìn)入堆棧的最后一個函數(shù),并且以拋出錯誤彈出,然后就是 secondFunction(),然后就是 thirdFunction() 這是第一個函數(shù)在執(zhí)行代碼的時候?qū)⑵鋲喝攵褩!?/p>
臨時存儲
調(diào)用一個函數(shù)時,該函數(shù),其參數(shù)和變量將被推入調(diào)用堆棧以形成堆棧框架,該堆棧是堆棧中的內(nèi)存位置。當(dāng)函數(shù)返回時(從棧彈出),將清除內(nèi)存。
管理功能調(diào)用
調(diào)用堆棧回鶻每一個堆棧幀位置的記錄。它知道下一個要執(zhí)行的功能,并在執(zhí)行后將其刪除,這就是使得 JavaScript 中的代碼執(zhí)行順序同步的原因。
調(diào)用堆棧如何處理函數(shù)調(diào)用?
我們將通過查看調(diào)用另一個函數(shù)的函數(shù)的示例代碼來回答這個問題:
function firstFunction(){console.log("Hello from firstFunction"); }function secondFunction(){firstFunction();console.log("The end from secondFunction"); }secondFunction();這是運(yùn)行代碼時發(fā)生的情況:
是什么導(dǎo)致堆棧溢出?
當(dāng)存在沒有出口點的遞歸函數(shù)(調(diào)用自身的函數(shù))時,將發(fā)生堆棧溢出。
看一個例子:
function callMyself() {callMyself() }callMyself()在瀏覽器執(zhí)行之后,會爆出以下錯誤:
綜上所訴
調(diào)用堆棧的主要收獲是:
總結(jié)
以上是生活随笔為你收集整理的slf4j 如何返回堆栈_重学JS系列 - JS 调用堆栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pythonmysql数据分析 tabl
- 下一篇: springboot 整合mybatis