下面是详细讲解“实例解析js中try、catch、finally的执行规则”的攻略。
一、try、catch、finally的基本概念
在JavaScript中,有时我们需要捕获程序执行中的异常信息,同时在出现异常时进行后续处理。这时候我们就需要用到try、catch和finally语句。
try
块用于捕获可能引发异常的代码块。catch
块用于处理try块中抛出的异常,并提供一个异常对象,这个错误对象包含了错误信息。finally
块在try块和catch块之后执行,无论是否有异常都会执行,一般用于资源的释放等操作。
下面是三者的基本语法结构:
try {
// 可能会引发异常的代码块
} catch (err) {
// 抛出异常时执行的代码块
} finally {
// 无论是否有异常都会执行的代码块
}
二、执行规则
下面我们来具体讲解一下try、catch、finally的执行规则:
-
首先,try块中的代码会被依次执行,如果代码执行成功则进入finally块,如果出现异常则进入catch块。
-
如果try、catch、finally都存在,则先执行try块中的代码,如果没有异常,则直接执行finally块中的代码。
-
如果try块中出现异常,则跳过try块中的剩余代码,进入catch块中进行处理,如下所示:
js
try {
console.log('step1')
throw new Error('出错了');
console.log('step2'); // 不会被执行到
} catch (err) {
console.log(err); // 输出异常信息
} finally {
console.log('finally'); // 最后执行
}
// 控制台输出:
// step1
// Error: 出错了
// at <anonymous>:3:9
// finally
在上面的代码中,我们故意在try块中抛出了一个异常,此时程序会跳过try块中的剩余代码,进入catch块中进行异常处理,最后再执行finally块中的代码。
- 如果在catch中再次抛出异常,则执行新的异常处理流程,即再次执行try代码块中的代码。
js
try {
console.log('step1');
throw new Error('出错了');
console.log('step2'); // 不会被执行到
} catch (err) {
console.log(err); // 输出异常信息
throw new Error('再次出错了'); // 在catch中再次抛出异常
} finally {
console.log('finally'); // 最后执行
}
// 控制台输出:
// step1
// Error: 出错了
// at <anonymous>:3:9
// Error: 再次出错了
// at <anonymous>:6:11
// finally
在上面的代码中,我们在catch中再次抛出了一个异常,此时程序会再次执行try块中的代码,并进行异常处理。
三、示例说明
下面我们来看一下两个具体的示例,帮助大家更好地理解try、catch、finally的执行规则:
示例一
try {
console.log(2);
} catch (err) {
console.log(err);
} finally {
console.log(3);
}
console.log(4);
在上面的代码中,try块中没有异常,所以catch块不会执行。程序会在try块中顺利执行完毕后,进入finally块中执行。最后输出结果为:
2
3
4
示例二
try {
console.log(2);
throw new Error('出错了');
console.log(3); // 不会执行到这里
} catch (err) {
console.log(err);
throw new Error('再次出错了');
} finally {
console.log(4);
}
console.log(5);
在上面的代码中,try块中抛出了一个异常,程序会跳过try块中的剩余代码,直接进入catch块中进行异常处理。catch中再次抛出一个异常,所以程序会再次执行try块中的代码,但此时不会进入catch块中。最后,程序会先执行finally块中的代码,然后再输出结果:
2
Error: 出错了
at <anonymous>:4:9
Error: 再次出错了
at <anonymous>:8:11
4
5
经过这两个例子的说明,相信大家对try、catch、finally的执行规则已经有了更深入的理解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:实例解析js中try、catch、finally的执行规则 - Python技术站