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