我在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中返回语句会发生什么。
答案 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