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

Javascript 确定超出最大调用堆栈大小的位置,javascript,debugging,Javascript,Debugging,我有这个功能: function _cssIsLoaded(cssStylesheet, stylePath) { var cssLoaded = 0; if (cssStylesheet.href == stylePath){ try { if ( cssStylesheet.sheet && cssStylesheet.sheet.cssRules.length > 0 ) cssL

我有这个功能:

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);
        }
它由样式表切换函数调用。虽然有时我会在运行函数时收到错误
uncaughtrangeerror:Maximum call stack size excelled,
。我想这一定是因为它不断循环,而条件从未得到满足?我只是不确定如何调试,以及在它将陷入困境时如何查看条件,因为大多数情况下它工作正常。我是否可以在该函数中设置断点,但只能在调用堆栈超过一定大小时执行

这是一个函数,用于在显示某些信息时切换样式表:

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);
}
函数切换模板(样式路径){
var osid=$('[id^=“themmestyle-”);
var stylenum=osid[0].id.split('-')[1];
var newstylenum=(Number(stylenum)+1.toString();
变量ns=$(''){
href:stylePath,
id:'主题样式-'+新闻样式编号,
键入:“text/css”,
rel:'样式表'
});
$(“标题”)。附加(ns);
$('#主题样式-'+stylenum).remove();
_cssisload(ns.get(0),stylePath);
}

错误
未捕获范围错误:超过最大调用堆栈大小
通常是关于无限递归或至少过度递归的警告

果然,你有这个问题。线路

setTimeout(this._cssIsLoaded(cssStylesheet), 200);
不做你想做的事。您希望它在延迟200后执行
this.\u cssIsLoaded(cssStylesheet)
,但实际上它会立即执行该函数(导致递归),然后在延迟200后执行其返回值

一个简单的解决办法是

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

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

很有意义!我做了更改,但实际上我仍然有相同的问题,所以肯定还有其他问题。另一个问题是我在第二次调用_cssIsLoaded时忘记了第二个参数。。