javascript - 确定超出最大调用堆栈大小的位置

标签 javascript debugging

我有这个功能:

function _cssIsLoaded(cssStylesheet, stylePath) {
    var cssLoaded = 0;
    if (cssStylesheet.href == stylePath){
        try {
            if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0 )
                cssLoaded = 1;
            else if ( cssStylesheet.styleSheet && cssStylesheet.styleSheet.cssText.length > 0 )
                cssLoaded = 1;
            else if ( cssStylesheet.innerHTML && cssStylesheet.innerHTML.length > 0 )
                cssLoaded = 1;
            }
            catch(ex){ }
    }
        if(cssLoaded) {
            resetPops();
            $('#video-overlay').show();
            positionElements();
            saveBizzmail();
        } else {
            setTimeout(this._cssIsLoaded(cssStylesheet), 200);
        }

它由样式表切换函数调用。有时,运行该函数时,我会收到错误 Uncaught RangeError: Maximum call stack size allowed, 。我想这一定是因为它不断循环并且条件从未得到满足?我只是不确定如何调试并查看出现问题时的情况,因为大多数情况下它都工作正常。我可以在该函数中执行相当于设置断点的操作,但仅当调用堆栈超过特定大小时吗?

这是切换样式表的函数(如果有说明的话):

function switchTemplate(stylePath){
var osid = $('[id^="themeStyle-"]');
var stylenum = osid[0].id.split('-')[1];
var newstylenum = (Number(stylenum) + 1).toString();
var ns = $('<link>', {
        href: stylePath,
        id: 'themeStyle-' + newstylenum,
        type: 'text/css', 
        rel: 'stylesheet'
    });
$("head").append(ns);
$('#themeStyle-' + stylenum).remove();
_cssIsLoaded(ns.get(0), stylePath);
}

最佳答案

错误Uncaught RangeError:超出最大调用堆栈大小通常是关于无限或至少过度递归的警告。

果然,你遇到了这个问题。线路

setTimeout(this._cssIsLoaded(cssStylesheet), 200);

没有按照你的想法做。您希望它在延迟 200 秒后执行 this._cssIsLoaded(cssStylesheet),但它实际上立即执行该函数(导致递归),然后在延迟 200 秒后执行其返回值。

一个简单的解决方法是

setTimeout(function() { this._cssIsLoaded(cssStylesheet); }, 200);

这为 setTimeout 提供了一个函数对象(这就是它正在寻找的),然后它将在延迟后执行该函数对象,就像您希望的那样。

关于javascript - 确定超出最大调用堆栈大小的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7474368/

相关文章:

javascript - 如何为 javascript 元素提供 CSS 类?

javascript - 调试React.js源代码,而不是react的DOM?

c - gdb 无法访问 $ebp 地址处的内存

javascript - node.js 和段错误

c++ - _DEBUG 与 NDEBUG

python - 在 pdb 模式下在命令提示符下键入 imshow(img) 时不显示 matplotlib 图形

javascript - 使用脚本或 CSS 动画替换/旋转句子中的多个单词

javascript - 如何在jquery中自动打印时删除不需要的内容,例如url

javascript - 在java中将月份中的天数列为下拉列表的可行算法

javascript - 在这里无法理解范围问题