如何在回调内部抛出错误并在外部捕获它

dar*_*a33 4 javascript try-catch

介绍

在这个 jQuery(document).ready() 函数内部,在匿名函数内部,我抛出一个错误,该错误被第二个 catch 块捕获。然后我在该 catch 块内部抛出一个错误,并尝试在第一个 try catch 块外部捕获它。

问题。

  1. 这可能吗?浏览器控制台显示“未捕获”。
  2. 如果是这样,怎么可能?
  3. 任何其他信息将不胜感激 - 试图解决这个问题。
    尝试 {
            // 绑定到就绪状态
            jQuery(文档).ready(函数() {
                尝试 {
                    throw Error("这可以在 jquery 回调之外捕获吗?");
                    _this.initialize();
                } 捕获(e){
                    console.log(e.message + '被回调捕获');
                    throw Error(e.message + '没有被外面捕获');
                }

            });

        } 捕获(e){
            //永远不会被执行。
            console.log(e.message);
        }
    

Igo*_*gor 5

的事件处理程序$(document).ready与注册它们的代码异步执行 - 如果页面仍在加载,则注册发生时。您function() { ... throw ... }在外部try/catch块之外执行。你所问的是不可能的。


@RickHitchcock 在https://jsfiddle.net/a3vttpk6/中观察到的行为的解释(请参阅问题的第一条评论)

如果在 Rick's fiddle 中单击 Javascript 设置按钮,您将看到“LOAD TYPE”设置为“onLoad”。这意味着该窗口中的整个 js 代码都包含在window.onload = function() { ... }. 这样做的结果是 - 立即执行处理程序$(document).ready,因为页面已经加载。如果您选择“不换行”设置 - 您将看到问题中描述的行为。