catch块中返回语句会发生什么

Rol*_*wal 14 javascript

我在javascript中试过这段代码

function abc(){
  try{
     console.log(0);
     throw "is empty";}
  catch(err){
     console.log(1);
     return true;
  }
  finally{return false;}
  return(4);
}
console.log(abc()); 
Run Code Online (Sandbox Code Playgroud)

我输出为假.我理解最后总是执行不管try catch的结果但是catch中返回语句会发生什么.

gur*_*372 26

我理解最后总是执行不管try catch的结果但是catch中返回语句会发生什么.

return语句catch只有在将被执行catch到达块,也就是说,如果没有抛出一个错误.

例如

function example() { 
    try { 
        throw new Error()
        return 1;
    } 
    catch(e) {
        return 2;
    }
    finally { 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

example()将返回,2因为之前抛出了错误return 1.

但是如果有一个finally块并且这个finally块有一个return语句,那么这return将覆盖catchreturn语句.

例如

function example() { 
    try { 
        throw new Error()
        return 1;
    } 
    catch(e) {
        return 2;
    }
    finally { 
        return 3;
    } 
} 
Run Code Online (Sandbox Code Playgroud)

现在example()将回归3.

在您的示例中,finally块之后有一个return语句.该声明永远不会被执行.

尝试

function example() { 
    try { 
        throw new Error()
        return 1;
    } 
    catch(e) {
        return 2;
    }
    finally { 
        return 3;
    } 
   console.log(5)
   return 4;
} 
Run Code Online (Sandbox Code Playgroud)

它只输出3,5因为在finally返回块值后从未打印过.

  • 如果我们在 catch 块中有一个 return 并在 finally 中有一个 console.log 会怎么样?将会执行什么? (2认同)
  • 为什么上一个示例中的 catch 块不返回 2?因为如果您在 return 语句之前添加 console.log,它将运行,这意味着它进入 catch 块,但不会运行 return。为什么 catch 中的 return 没有运行?或者它是否已运行但以某种方式被取消?那里会发生什么? (2认同)