請解釋異步函數Asynchronous
非同步函式 (asynchronous function) 是 JavaScript 中的一種特殊函式,它可以在不阻塞主執行緒的情況下執行任務。
非同步函式的執行流程是這樣的:
-
主執行緒會先執行非同步函式之前的程式碼。
-
非同步函式被呼叫時,主執行緒會把它加入事件佇列,並繼續執行之後的程式碼。
-
主執行緒完成其他工作之後,會再次檢查事件佇列,如果有非同步函式在佇列中,就會執行它。
非同步函式常常和回撥函式 (callback function) 配合使用,當非同步函式執行完成後,就會呼叫回撥函式,以通知主執行緒非同步函式的工作已經完成。
例如:
setTimeout(() => {
console.log("Hello, World!");
}, 1000);
console.log("Start...");
在這個例子中,setTimeout 是一個非同步函式,它會在一秒鐘之後執行console.log("Hello, World!"),而 console.log("Start...")是同步程式碼,會先執行,所以會首先顯示 "Start..." ,一秒後才會顯示 "Hello, World!"
非同步程式設計使得 JavaScript 不會被長時間執行的程式阻塞,能夠做到不卡住瀏覽器,提高使用者體驗。
Async function-Await 函式
Callback functions 回撥函式:是一種特殊的函式,它可以作為引數傳遞到其他函式中,然後當特定事件完成時,將它作為回撥函式呼叫。
Generator functions 生成器函式:是一種特殊的函式,它可以暫停和恢複函式的執行,可以用來在處理長時間執行的操作(例如 I/O 操作)時使程式碼看起來更同步。
Promise函式
都是非同步函式
這些非同步函式的選擇取決於您的需求。如果您需要在後臺執行長時間執行的任務並在完成時進行回撥,則 Callback functions 是一個很好的選擇。如果您需要更加同步地管理非同步操作,那麼 Async/Await 或 Promises 是更好的選擇。