如何查找/修复“超出最大调用堆栈大小”错误?

时间:2014-04-11 20:10:50

标签: javascript jquery runtime-error

我正在创建自己的Word Search游戏。我已经拥有了我需要的所有元素和部件,并让它在一定程度上发挥作用。当我执行递归函数以确定我可以将字母放在字典中的哪个位置时,我得到一个未捕获的RangeError:超出最大调用堆栈大小错误。我做了一些挖掘,发现它与递归有关,但不确定如何修复它或确切地说错误是什么。

我知道在发布JSFiddle链接之前我想要发布代码所以这里是我认为错误来自的代码片段,但整个游戏都在它下面的链接中。提前谢谢。

_self.checkFit(_newRow, _newCol, _newID, text);

我将整个代码放在JSFiddle上:http://jsfiddle.net/rS7Qw/

更新:大家好,抱歉花了这么长时间回复。问题出在checkFit函数中。我随机生成一个坐标(板上的块)我检查放置块是否可以支持该单词,或者它是否超出范围。如果超出范围,我会随机生成一个新坐标并再次调用相同的函数。正是在这一点上发生了错误。遗憾的是,是的,有很多递归,因为生成的随机数/坐标可能是将代码置于范围之外的任何东西。每次超出范围时我都会尝试清除数组。只是简单地访问数组会导致此错误吗?唯一的错误位置是第133-182行,这是checkFit函数。几乎所有其他功能都按预期运行。我还有更多要添加以巩固它,但目前这个错误让我难过。我不确定为什么会这样。我会更新我遇到问题的代码部分的原始版本。

checkFit : function(row, col, id, text){
    var _self = this;
    var _tmpArr = text.split("");
    var _spaceHTML = "";
    var _canFit = 0;
    var _newRow = 0;
    var _newCol = 0;
    var _newID = id;
    var _arrSequence = new Array();

    for(x in _tmpArr){
        if($('#'+_newID).length){
            _spaceHTML = $('#'+_newID).html();
            if((_spaceHTML == "") || (_spaceHTML == _tmpArr[x])){
                if(_arrSequence.indexOf(_newID) < 0){
                    _canFit++;
                    _arrSequence.push(_newID);
                } else {
                    _arrSequence.length = 0;
                    break;
                }
            } else {
                _arrSequence.length = 0;
                break;
            }
            var _newCoord = _newID.split("");
            _newRow = parseInt(_newCoord[0]) + row;
            _newCol = parseInt(_newCoord[1]) + col;
            _newID = _newRow.toString() + "" + _newCol.toString();
        } else {
            _arrSequence.length = 0;
            break;
        }
    }

    if(_canFit < text.length){
        _arrSequence.length = 0;
        _newRow = _self.getRandomRow();
        _newCol = _self.getRandomCol();
        _newID = _newRow.toString() + "" + _newCol.toString();
        try{
            _self.checkFit(_newRow, _newCol, _newID, text);
        } catch (ex){
            console.log(ex);
        }
    } else {
        _self.addTerms(_newRow, _newCol, _arrSequence, text);
        _arrSequence.length = 0;
    }
}

0 个答案:

没有答案