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

时间:2016-06-27 09:53:28

标签: 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()); 

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

2 个答案:

答案 0 :(得分:18)

  

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

catch中的

返回语句仅在达到catch块时执行,即如果出现错误。

例如

function example() { 
    try { 
        throw new Error()
        return 1;
    } 
    catch(e) {
        return 2;
    }
    finally { 
    } 
} 

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

但如果有finally块且此finally块有return语句,则此return将覆盖catch返回语句。

例如

function example() { 
    try { 
        throw new Error()
        return 1;
    } 
    catch(e) {
        return 2;
    }
    finally { 
        return 3;
    } 
} 

现在example()将返回3

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

尝试

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

仅输出3,从未打印5,因为返回finally块值后。

答案 1 :(得分:1)

最后它总是执行最后一次。所以它会覆盖你拥有的任何其他回报。因此,您的方法返回false