try、catch、finally用法总结:
1、不论有没有异样,finally中的代码都会执行
2、当try、catch中有return时,finally中的代码仍然会继续执行
3、try或catch外面有return语句,finally外面的表达式依旧会执行,但不影响try.catch return的值。
finally语句执行不会影响try或catch的return
const test = () => { let a = 123; try { console.log('this is - try - , a = ', a); return a; } catch (error) { console.log('this is - catch - , a = ', a); return a; } finally { console.log('this is - finally -, a = ', a); a = '000'; console.log('this is end of - finally -, a = ', a); } }; console.log(test());
打印后果
// this is - try - , a = 123// this is - finally -, a = 123// this is end of - finally -, a = 000// 123
异样catch
const test = () => { let a = 123; try { console.log('this is - try - , a = ', a); throw new Error('test error'); return a; } catch (error) { a = 9999; console.log('this is - catch - , a = ', a); return a; } finally { a = '000'; console.log('this is - finally -, a = ', a); } }; console.log(test());
打印后果
// this is - try - , a = 123// this is - catch - , a = 9999// this is - finally -, a = 000// 9999
这里要留神返回的不是援用类型。援用类型,finally的批改会影响函数返回值
4、finally代码中最好不要蕴含return,会笼罩try和catch的return
const test = () => { let a = 123; try { console.log('this is - try - , a = ', a); throw new Error('test error'); return a; } catch (error) { console.log('this is - catch - , a = ', a); a = 9999; return a; } finally { console.log('this is - finally -, a = ', a); a = '000'; console.log('this is end of - finally -, a = ', a); return a; } }; console.log(test());
打印后果
// this is - try - , a = 123// this is - catch - , a = 123// this is - finally -, a = 9999// this is end of - finally -, a = 000// 000