我有以下代碼示例來說明我的觀點。當我加載此在IE8在Vista上我得到的錯誤「堆棧Overfow在行:16」使用Javascript類函數執行15次遞歸後的堆棧溢出
如果我改乘使用頂級函數(TestClass的對象外)我可以遞歸數百萬次無堆棧溢出。
這是怎麼發生的?最終,我只是實現了一個Function Que,而不是使用遞歸,但對我來說沒有意義,我想了解原因。
- 代碼 -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
<html>
<head>
<title>Recusion Test</title>
<body>
</body>
<script type="text/javascript">
function testClass() {
this.x = 15;
this.recurse = function() {
this.x--;
this.recurse();
}
}
var wtf = new testClass();
wtf.recurse();
alert('done');
</script>
</head>
</html>
好的,這是我的一個錯誤,我簡化了一個複雜的類用於演示目的,我忘了包括它。請參閱下面的答案。在我的實際代碼庫中,我能夠在沒有SO的情況下遞歸14次,但在15時它會失敗。 – 2009-10-08 21:29:05