Get to know MDN better
此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。
當函式呼叫過多,或函式缺少基礎情況時,會發生 JavaScript 的「too much recursion」或「Maximum call stack size exceeded」例外。
Firefox 中為 InternalError;Chrome 和 Safari 中為 RangeError。
一個會呼叫自己的函式稱為遞迴函式。一旦滿足某個條件,函式就會停止呼叫自己。這稱為基礎情況。
在某些方面,遞迴類似於迴圈。兩者都會多次執行相同的程式碼,且都需要一個條件(以避免無限迴圈,或在此情況下是無限遞迴)。當函式呼叫過多,或函式缺少基礎情況時,JavaScript 就會拋出此錯誤。
此遞迴函式根據終止條件執行 10 次。
將此條件設定為一個極高的值,將無法運作:
這個遞迴函式缺少一個基礎情況。由於沒有終止條件,函式將會無限地呼叫自己。
當一個值被指派給 name 屬性(this.name = name;)時,JavaScript 需要設定該屬性。當這種情況發生時,就會觸發 setter 函式。
在此範例中,當 setter 被觸發時,它被告知要再次做同樣的事情:設定它本應處理的同一個屬性。這會導致函式不斷地呼叫自己,從而造成無限遞迴。
如果在 getter 中使用相同的變數,也會出現此問題。
為避免此問題,請確保在 setter 函式內部指派的屬性與最初觸發 setter 的屬性不同。getter 也是如此。
This page was last modified on 2026年2月2日 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.