错误对象的传递
在发生错误时,错误出现的位置、错误的类型,错误信息等数据,都会以一个对象的形式传递给catch语句,通过catch(e)的方式来接收,其中e是错误对象的变量名。
错误对象会在函数之间传递。当try中的代码调用了其他函数时,如果在其他函数中出现了错误,且没有使用try…catch处理时,程序就会停下来,将错误传递到调用当前函数的上一层函数,如果上一层函数仍然没有处理,则继续向上传递。具体示例如下。
1 function foo1() {
2 foo2();
3 console.log('foo1');
4 }
5 function foo2() {
6 var o = {};
7 o.func(); // 发生错误
8 }
上述代码中,foo1()函数调用了foo2()函数,而foo2()函数的代码存在错误。此时如果调用foo1()函数,则foo2()中的错误对象会传递给foo1(),foo1()继续传递给外层的catch。示例代码如下。
1 try {
2 foo1();
3 } catch(e) {
4 console.log('test');
5 }
上述代码执行后,控制台的输出结果中只有test,没有foo1,说明foo1()函数后面的代码没有执行。