如何解决“未捕获的RangeError:超出最大调用堆栈大小”错误?

时间:2019-04-15 17:10:27

标签: javascript

我有一个用于规划橱柜的基于javascript的规划器应用程序。在移动视图中,我实际上收到了此错误:

  

未捕获的RangeError:超出了最大调用堆栈大小

导致此错误的函数如下:

XMLClass.prototype.get = function(varName, thisObject) {
    if (this[varName] instanceof Function) {
        return (this[varName]).apply(thisObject);
    } else if (this.hasOwnProperty(varName)) {
        return this[varName];
    } else if (this.parent) {
        return this.parent.get(varName);
    } else {
        return false;
    }
};

这是一个帮助程序功能,在创建文章菜单时使用。该错误是由此函数本身引起的,还是由为菜单提供数据的XML文件引起的?

有人可以帮我解决这个问题吗?那真是太棒了! 预先感谢!

编辑:

在这里调用该方法:

MobileCabinetMode.prototype.getAlternativeArticle = function(article) {
    if (!(article instanceof Article)) return false;
    depthAlternative = article.getAlternative("depth", DEFAULT_DEPTH);
    if (depthAlternative) {
        return depthAlternative;
    }
    var widths = article.getAllAlternative('width');
    for (var i = 0; i < widths.length; i++) {
        var alternative = planner.artNoArtList[widths[i].artnr];
        if (!alternative.fitsAttribute("depth", DEFAULT_DEPTH)) {
            alternative = this.getAlternativeArticle(alternative.getAllAlternative("depth", DEFAULT_DEPTH));
        } else if (alternative !== article) {
            alternative = this.getAlternativeArticle(alternative);
        }
        if (alternative instanceof Article && alternative.fitsAttribute('depth', DEFAULT_DEPTH) && alternative.isActive()) {
            return alternative;
        }

    }
    return false;
};

关键点在第13行:

alternative = this.getAlternativeArticle(alternative);

您是否有足够的信息?

1 个答案:

答案 0 :(得分:0)

至少我得到了此代码创建者的答案。最后,我必须用一个本身已经存在(在另一个文件中)的较新版本替换我在原始帖子中提到的功能“ getAlternativeArticle”。 要查看差异,可以在这里查看结果:

MobileCabinetMode.prototype.getAlternativeArticle = function(article) {
    // TODO: remove
    if (~this.alternativeSearch.indexOf(article.artnr)) {
        return false;
    }
    if (!(article instanceof Article)) return false;
    this.alternativeSearch.push(article.artnr);
    depthAlternative = article.getAlternative("depth", DEFAULT_DEPTH);
    if (depthAlternative) {
        this.alternativeSearch = [];
        return depthAlternative;
    }

    var widths = article.getAllAlternative('width');
    for (var i = 0; i < widths.length; ++i) {
        var artnr = widths[i].artnr;
        var alternative = planner.artNoArtList[artnr];
        if (!alternative.fitsAttribute("depth", DEFAULT_DEPTH)) {
            alternative = this.getAlternativeArticle(alternative.getAllAlternative("depth", DEFAULT_DEPTH));
        } else if (alternative !== article) {
            alternative = this.getAlternativeArticle(alternative);
        }
        if (alternative instanceof Article && alternative.fitsAttribute('depth', DEFAULT_DEPTH) && alternative.isActive()) {
            this.alternativeSearch = [];
            return alternative;
        }
    }
    return false;
};

但是,我仍然要感谢您的答复和帮助!