這篇文章將為大家詳細(xì)講解有關(guān)深入淺析JS中的執(zhí)行模型,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。
JavaScript執(zhí)行模型
引言
JavaScript是一個(gè)單線程(Single-threaded)異步(Asynchronous)非阻塞(Non-blocking)并發(fā)(Concurrent)語(yǔ)言,這些語(yǔ)言效果通過(guò)一個(gè)調(diào)用棧(Call Stack)、一個(gè)事件循環(huán)(Event Loop)、一個(gè)回調(diào)隊(duì)列(Callback Queue)有些時(shí)候也叫任務(wù)隊(duì)列(Task Queue)與跟運(yùn)行環(huán)境相關(guān)的API組成。
概念
調(diào)用棧 Call Stack
調(diào)用棧是一個(gè)LIFO后進(jìn)先出數(shù)據(jù)結(jié)構(gòu)的函數(shù)運(yùn)行棧,它內(nèi)部的數(shù)據(jù)結(jié)構(gòu)為函數(shù)幀。當(dāng)在JavaScript中調(diào)用一個(gè)函數(shù)時(shí),它將被壓入棧中,當(dāng)這個(gè)函數(shù)內(nèi)部還有另一個(gè)函數(shù)被調(diào)用時(shí),另一個(gè)函數(shù)將會(huì)被壓入棧頂,直到其內(nèi)部沒(méi)有更多調(diào)用,棧頂函數(shù)將會(huì)被以單線程方式執(zhí)行并出棧,直到最后一個(gè)函數(shù)幀出棧。JavaScript語(yǔ)言特性中的單線程就是指的調(diào)用棧的單線程運(yùn)行。
function multiply(a, b) { return a * b; } function square(n) { return multiply(n, n) } function printSquare(n) { console.log(square(n)); } printSquare(4);