一、事件循環(huán)(event loop)
- 函數(shù)在每次執(zhí)行時汹买,都會產(chǎn)生一個執(zhí)行環(huán)境
- 執(zhí)行環(huán)境負責存儲函數(shù)執(zhí)行時產(chǎn)生的一切數(shù)據(jù)
- 問題:函數(shù)的執(zhí)行環(huán)境要存儲到哪里呢唯袄?
函數(shù)的執(zhí)行環(huán)境存儲到了一個叫做調(diào)用棧的地方
二荸实、棧
是一種數(shù)據(jù)結(jié)構(gòu),特點:后進先出
2.1惭载、調(diào)用棧(call stack)
- 調(diào)用棧負責存儲函數(shù)的執(zhí)行環(huán)境
- 當一個函數(shù)被調(diào)用時旱函,它的執(zhí)行環(huán)境會作為一個棧幀
- 插入到調(diào)用棧的棧頂,函數(shù)執(zhí)行完畢其棧幀會自動從棧中彈出
image.png
三描滔、消息隊列
- 消息隊列負責存儲將要執(zhí)行的函數(shù)
- 當我們觸發(fā)一個事件(如用戶主動點擊事件)時棒妨,其響應(yīng)函數(shù)并不是直接就添加到調(diào)用棧中的
因為調(diào)用棧中有可能會存在一些還沒有執(zhí)行完的代碼 - 事件觸發(fā)后,JS引擎是將事件響應(yīng)函數(shù)插入到消息隊列中排隊
只有棧中任務(wù)執(zhí)行完了含长,消息隊列才會入棧
如果用戶點擊多次券腔,會在消息隊列中排多個任務(wù),遵循先進先出
image.png