我正在创建自己的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;
}
}