踩坑筆記:JavaScript 模組的循環依賴與 Cannot access before initialization 錯誤

JavaScript 模組的循環依賴與 Cannot access ... before initialization 錯誤 在日常的程式碼開發中,我們經常會遇到各種奇奇怪怪的錯誤。其中有一種錯誤,它的訊息看似簡單,卻可能隱藏著深層的架構問題,那就是 Uncaught ReferenceError: Cannot access 'X' before initialization。這篇文章將深入探討這個錯誤背後的「循環依賴」問題,以及一個看似無害的改動如何引爆這個潛在的炸彈。 什麼是循環依賴? 循環依賴是指兩個或多個模組互相依賴對方的情況: 模組 A 需要使用模組 B 的功能 同時,模組 B 也需要使用模組 A 的功能 這就像兩個人互相需要對方才能完成任務,形成了一個「你中有我,我中有你」的循環。 循環依賴的程式碼範例 // moduleA.js import { someFunctionB } from './moduleB'; export function someFunctionA() { // ... 使用 someFunctionB } // moduleB.js import { someFunctionA } from './moduleA'; export function someFunctionB() { // ... 使用 someFunctionA } 為什麼循環依賴會導致 Cannot access ... before initialization? JavaScript 的 ES Module 有一套嚴格的加載和初始化機制。當模組被加載時,它會經歷幾個階段:...

January 27, 2025 · 3 分鐘 · Rhan0