在其陈述的MDN中,
如果finally块返回一个值,此值将成为整个try-catch-finally生成的返回值,无论try和catch块中是否有任何return语句:
所以我尝试执行以下代码,
function an(){
var r = try{
throw 1;
} catch(e){
console.log("Caught: %o", e);
} finally {
return 2;
}
console.log("r=%o", r);
return 3;
}
它不起作用。引发语法错误。
SyntaxError: syntax error
var r = try{
这里有什么问题?
答案 0 :(得分:6)
我认为问题只是你试图为变量分配一个try语句。据我所知(我不是JS专家)你不能这样做。这是一个陈述,而不是表达。
我认为这与返回值完全不同。
尝试将try / catch / finally语句放入单独的函数中,然后调用它,将结果赋给r:
function foo() {
try {
throw 1;
} catch(e) {
console.log("Caught: %o", e);
} finally {
return 2;
}
}
var r = foo();
console.log("r=%o", r);
在Chrome的Javascript控制台中,它提供:
Caught: 1
r=2
编辑:我同意文档中的“生产”一词在这里有点令人困惑。根据评论,它在技术上是准确的 - 但这并不能阻止它混淆,当然。我怀疑在大多数情况下“功能”会更清晰,可能不那么准确。
答案 1 :(得分:1)
你的假设是错误的。你有语法错误。 try
块不会返回任何内容。
function an(){
var r;// <---- here
try{// <----- here
throw 1;
} catch(e){
console.log("Caught: %o", e);
} finally {
return 2;
}
console.log("r=%o", r);
return 3;
}
答案 2 :(得分:1)
他们的意思是:
function an() {
try {
throw 999;
return "in try";
} catch(e) {
return "in catch";
} finally {
return "in finally";
}
return "in func";
}
console.log(an()) // in finally
JS忽略所有return
语句,但finally块中的语句除外。