JavaScript 入門:同步與非同步? 為何需要非同步函式

更新 發佈閱讀 4 分鐘

上一篇文章【JavaScript 入門:什麼是一等函式、高階函式 (HOF) 與回呼函式 (Callback)】中,介紹了高階函式與回呼函式。上一篇的範例,回呼函式都是被立刻執行,今天要介紹的就是「不會立刻執行的函式」也就是非同步函式 Asynchronous function


同步與非同步

同步 Synchronous

同步的意思是:一件事做完才會做下一件事。例如:

console.log("A");
console.log("B");
console.log("C");

這段程式碼的執行順序會是:

A
B
C

非同步 Asynchronous

非同步的意思就與同步相反:某些事情可以先交代出去,之後再回頭處理。例如:

console.log("A");
setTimeout(()=>{
console.log("B");
},1000)
console.log("C");

這段程式的結果會是:

A
C
B

為什麼明明 setTimeout 寫在中間,卻在最後才印出 "B"?

我們來仔細看一下,setTimeout 接收了一個箭頭函式,並且在 1000 毫秒後執行被傳入的函式。setTimeout 就是上一篇介紹的「高階函式」,而被傳入等待執行的箭頭函式就是「回呼函式」。

如果忘記高階函式的概念可以回來看這篇文章:【JavaScript 入門:什麼是一等函式、高階函式 (HOF) 與回呼函式 (Callback)

在這個非同步函式的例子中,JS 並不會在原地等待一秒、執行完 console.log("B") 後再接著往下執行 console.log("C"),而是把「等待一秒」這個工作交給瀏覽器的計時機制處理,主程式先去執行 console.log("C"),等一秒過後才回頭執行 console.log("B")

所以說,

非同步函式就是:不會阻塞主程式運行,而是將需要等待的工作交出去,等結果準備好後再繼續處理的函式。

為何需要非同步函式

JavaScript 最初是設計跑在瀏覽器上的,如果每次執行下一個動作都要等前面的動作完成,可能會造成網頁不順暢。

舉例來說,如果沒有非同步,JS 在等待資料從資料庫或伺服器取撈回來的這段時間畫面會不能點擊、不能滾動,除了看起來像是當機外,使用體驗也會很差。因此 JS 利用非同步的設計,把需要等待的工作交出去,主程式可以繼續跑,等取得結果後再回頭處理。

非同步函式的目的是要避免耗時的任務(像是網路請求或定時器)阻塞執行緒,確保網頁在等待結果時仍能順暢地回應使用者的操作。

結論

同步與非同步的差異在於程式是否會「等待前一件事完成」才繼續往下執行

同步函式會依序完成程式碼,而非同步函式則會將需要等待的工作交出去,讓主程式可以先往下執行其他任務,等待結果完成後再回頭處理回呼函式。這樣的設計讓 JavaScript 即使在等待耗時任務的同時也可以保持畫面流暢與良好的使用者體驗。

下一篇文章,我們會進一步介紹 JavaScript 中的非同步函式怎麼實現,從 callback、promise 到 async/await 的概念逐步了解這些方法如何解決非同步函式的問題。

留言
avatar-img
Elaine 粼粼的林林總總
7會員
36內容數
不定期地分享程式/旅遊/學習/閱讀或各式各樣的文章,如果對我的分享有興趣,歡迎來找我玩~
2026/02/10
為什麼說 JavaScript 函式是一等公民 ? 本篇文章透過超簡單白話文範例,帶你理解一級函式、高階函式 (Higher-order function) 與回呼函式 (Callback function) 的定義與關係。學會如何將函式當作參數傳遞與回傳,並為接下來的非同步程式設計打下堅實基礎!
2026/02/10
為什麼說 JavaScript 函式是一等公民 ? 本篇文章透過超簡單白話文範例,帶你理解一級函式、高階函式 (Higher-order function) 與回呼函式 (Callback function) 的定義與關係。學會如何將函式當作參數傳遞與回傳,並為接下來的非同步程式設計打下堅實基礎!
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/08
本文深入解析 JavaScript 中的函式 (Function),涵蓋函式宣告式、函式表達式(包括匿名函式)及 ES6 箭頭函式。解釋函式的提升、參數、回傳、作用域,並透過範例說明不同定義方式的語法與特性。
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
2026/02/07
帶你理解 JavaScript 的 Hoisting 機制,包括 var、let、const 變數宣告及函式宣告與表達式的提升行為,以及暫時死區 (Temporal Dead Zone) 的概念。
Thumbnail
看更多
你可能也想看
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
債券投資,不只是高資產族群的遊戲 在傳統的投資觀念中,海外債券(Overseas Bonds)常被貼上「高資產族群專屬」的標籤。過去動輒 1 萬甚至 10 萬美元的最低申購門檻,讓許多想尋求穩定配息的小資族望而卻步。 然而,在股市波動劇烈的環境下,尋求穩定的美元現金流與被動收入成為許多投資人
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
透過川普的近期債券交易揭露,探討債券作為資產配置中「穩定磐石」的重要性。文章分析降息對債券的潛在影響,以及股神巴菲特的操作策略。並介紹玉山證券「小額債」平臺,如何讓小資族也能低門檻參與海外債券市場,實現「低門檻、低波動、固定收益」的務實投資方式。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
解析「債券」如何成為資產配置中的穩定錨,提供低風險高回報的投資選項。 藉由玉山證券的低門檻債券服務,投資者可輕鬆入手,平衡風險並穩定財務。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
相較於波動較大的股票,債券能提供固定現金流,而玉山證券推出的小額債,更以1000 美元的低門檻,讓學生與新手也能參與全球優質企業債投資。玉山E-Trader平台即時報價、條件式篩選與清楚的交易流程等特色,大幅降低投資難度,對於希望分散風險、建立穩定現金流的人來說,玉山小額債是一個值得嘗試的理財起點。
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
練習目標 這篇是我的前端練習記錄,透過 CodePen 製作一個小功能:「點一下按鈕,就讓整個畫面換個背景色」。 這個練習適合剛開始學習 HTML、CSS、JavaScript 的人,幫助理解: 按鈕怎麼綁定事件 JavaScript 怎麼控制畫面樣式 如何產生隨機顏色 練習畫面預覽
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
iFrame在微前端架構中的優缺點,分析了其對用戶體驗、SEO及性能的影響。 iFrame在嵌入小型UI元件、創建隔離環境等特定場景中仍具備相當的應用價值。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
本文介紹如何使用Vite建立前端開發初始檔案,並加入Tailwindcss的教學。透過指令和配置檔,讓你能快速建立個人專案的開發環境,並學習如何加入全域的Tailwindcss樣式。還有影片教學、資源連結和更多相關教學文章等,幫助你進一步學習。
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
為什麼要登出使用者? 安全性:防止未經授權的人,在使用者暫離時使用系統,這在公用或共享電腦的環境中尤其重要。 資料保護:只要使用者處於登入狀態,就會暴露在個人資料被他人操縱或利用的風險中,因此登出閒置使用者對資安也很重要。 如何在 Vue 3 專案中實作此功能?
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
這一集用最新的Vite工具去創建初始檔案。Vite用於創建和構建Web應用程序,具有快速的啟動時間、即時熱更新、小型體積、支持多種框架和可擴展性等優點。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
隨著科技發展迅速,軟體職缺需求大增長,有些朋友對IT產業有興趣並想成為一位軟體工程師,但不知道從哪裡下手,透過傳統學校、培訓班或自學等不同方法,有多種學習路徑可以選擇。此外,還提供了一些額外資源教學連結,方便讀者進一步提升相關技能。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
Thumbnail
在 2021 年的剛轉職成為前端工程師的時候,我在面試時滿常會被詢問到 JavaScript 中閉包的議題,當時候自己回答的滿差的,於是在 2022 年時,我寫了一系列的有關於函式程式設計鐵人賽的文章, 裡頭就有簡單提到有關於閉包的議題。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News