同步模式(Synchronous)

泗洪雙溝 發表於 2020-11-22

概念:
程式碼中的任務依次排隊執行,執行順序與程式碼的編寫順序是完全一致的。在單執行緒下大多數任務都會以同步模式去執行
執行講解:
例:

console.log('begin')   
function A(){
	console.log('A task')
}
function B(){
	console.log('B task')
	A()
}
B()
cosnole.log('end')

1、js執行引擎會把整體的程式碼全部載入進來
2、然後在呼叫棧(Call stack)當中壓入一個匿名(anonymous)的呼叫,這個匿名的呼叫可以理解為把全部的程式碼放入到一個匿名的函式當中去執行,然後去逐行執行
3、呼叫棧中依次壓入上述程式碼去執行,呼叫棧中:
(anonymous) 逐行執行
console.log(‘begin’) 執行 彈出
B() 執行
console.log(‘B task’) 執行 彈出
A()執行
console.log(‘A task’) 執行 彈出
A()彈出
B()彈出
cosnole.log(‘end’) 執行 彈出
(anonymous) 彈出
呼叫棧的理解
呼叫棧只是一個更專業的說法,通俗的解釋是,js在執行引擎中維護了一個正在執行的工作表,當工作表中的所有任務被清空完後,這一輪的工作就結束了

問題:如果某一任務執行時間過長,後面的任務就要延遲(阻塞),一直等待,這種阻塞對使用者來說,介面就會卡頓或者卡死,這就必須要非同步任務來解決程式中無法避免的耗時操作,例如ajax,node.js中的大檔案讀寫等避免程式碼被卡死