Javascript 从函数中引发和捕获异常

Javascript 从函数中引发和捕获异常,javascript,xmlhttprequest,Javascript,Xmlhttprequest,可能会执行“catch”部分(在控制台中显示消息),但异常保持未锁定状态(=在控制台中显示“未捕获的故障”)。 为什么?这样的回调不会引发抛出。传入错误处理回调并手动处理 让我来举例说明你的堆栈跟踪 onreadystatechange函数和connectTo函数之间没有stacktrace连接。因此,当您抛出一个错误时,它永远不会出现在connectTo周围的try-catch块中 firefox正在做的是说“哦,你做了一些不起作用的事情。让我来帮你解决这个问题,然后做你认为它能做的事情” 好

可能会执行“catch”部分(在控制台中显示消息),但异常保持未锁定状态(=在控制台中显示“未捕获的故障”)。
为什么?

这样的回调不会引发抛出。传入错误处理回调并手动处理

让我来举例说明你的堆栈跟踪

onreadystatechange函数和connectTo函数之间没有stacktrace连接。因此,当您抛出一个错误时,它永远不会出现在connectTo周围的try-catch块中

firefox正在做的是说“哦,你做了一些不起作用的事情。让我来帮你解决这个问题,然后做你认为它能做的事情”


好吧,那么,为什么这里有try{}catch()可供使用呢?我这里不是说你的代码,我只是说,为什么我不能用try{}catch(){}一般来捕获异常?@RadekSimko你可以,但是onreadystate函数不在connectTo函数链中。它不会冒泡,所以它意味着try-catch只捕获1级函数中的异常?如果有一个函数调用另一个函数,而第二个函数抛出异常,则必须在调用该函数的函数中捕获该函数?@RadekSimko您永远不会调用onreadystatechange函数。它由浏览器异步处理。
function connectTo(url) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == xhr.DONE) {
            throw "Troubles.";
        }
    };
    xhr.send();
}

try {
    connectTo("http://www.google.com");
} catch (e) {
    console.log('Exception happend.');
}
function connectTo(url, err) {
    var xhr = new XMLHttpRequest();
    xhr.open("GET", url, false);
    xhr.onreadystatechange = function () {
        if (xhr.readyState == xhr.DONE) {
            err.call(this, new Error("troubles"));
        }
    };
    xhr.send();
}

connectTo("http://www.google.com", function(e) {
     console.log(e);
});