try-catch是捕獲非常的神器,不管是調試照樣防備軟件崩潰,都離不開它。本日筆者引見一下加上finally后的實行遞次
function test() {
try {
console.log(1);
} finally {
console.log(2);
}
}
console.log(test()); // 1 2
嗯!按遞次實行了。
我們在try中到場return語句
function test() {
try {
console.log(1);
return 'from_try';
} catch (e) {
// TODO
} finally {
console.log(2);
}
}
console.log(test()); // 1 2 from_try
等等,豈非不該該是 1 > from_try > 2
的遞次嗎?
抱歉啊,是如許的,在try和catch的代碼塊中,假如遇到return語句,那末在return之前,會先實行finally
中的內容,所以2會比from_try優先輸出。
我們在finally中也到場return語句
function test() {
try {
console.log(1);
return 'from_try';
} catch (e) {
// TODO
} finally {
console.log(2);
return 'from_finally';
}
}
console.log(test()); // 1 2 from_finally
買噶的,我的from_try怎樣不見了?
抱歉,按照上一條的劃定規矩,finally是會優先實行的,所以假如finally里有return語句,那末就真的return了。
如今筆者在try語句塊中有意報錯
function test() {
try {
console.log(1);
throw new Error('throw');
} catch (e) {
console.log(e.message);
return 'from_catch';
} finally {
console.log(2);
}
}
console.log(test()); // 1 throw 2 from_catch
看來,try和catch的return都須要先經由finally。
結語
只是一個很小的細節。但也願望列位看官好好應用這類特徵。