try...finally报错:Unsafe usage of ReturnStatement

try 不仅可以和 catch 搭配食用,还有一个 finally 语句块。

  1. try {
  2.   console.log('try块内log')
  3.   return 'try中的return'
  4. } catch (error) {
  5.   console.log('catch块内log')
  6. } finally {
  7.   console.log('finally块内log')
  8.   return 'finally中的return'
  9. }

它会先于 try 语句块的 console.log() 执行,后与 try 语句块的 return 执行。

打印结果:

  1. try块内log
  2. finally块内log
  3. finally中的return

但是,如果开启了 ESLint,上面的代码会报错。

error: Unsafe usage of ReturnStatement (no-unsafe-finally) at ... 

因为 JavaScript 会暂停 trycatch 语句块中的控制流语句,直到 finally 语句块执行完毕。

所以,当 returnthrowbreakcontinue 出现在 finally 中时, trycatch 语句块中的控制流语句将被覆盖,这被认为是意外的行为。比如:

  1. (() => {
  2.     try {
  3.         return 1;
  4.     } catch(err) {
  5.         return 2;
  6.     } finally {
  7.         return 3;
  8.     }
  9. })();
  10.  
  11. // > 3

如果 finally 语句块中有 return,会阻止程序继续执行,也就是说无法正常完整的执行 try 语句块中的流程,所以 ESLint 不允许在 finally 中使用 return,会报错提示“不安全的用法”。

未经允许不得转载:前端资源网 - w3h5 » try...finally报错:Unsafe usage of ReturnStatement

赞 (0)
分享到: +

评论 沙发

Avatar

换个身份

  • 昵称 (必填)
  • 邮箱 (选填)