finally块中的return语句

Gen*_*han 2 javascript exception try-catch try-catch-finally

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;
}
Run Code Online (Sandbox Code Playgroud)

这是行不通的.引发语法错误.

SyntaxError: syntax error

    var r = try{
Run Code Online (Sandbox Code Playgroud)

这里有什么不对?

Jon*_*eet 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);
Run Code Online (Sandbox Code Playgroud)

在Chrome的Javascript控制台中,它提供:

Caught: 1
r=2
Run Code Online (Sandbox Code Playgroud)

编辑:我同意文档中的"生产"一词在这里有点令人困惑.根据评论,它在技术上是准确的 - 但这并不能阻止它混淆,当然.我怀疑在大多数情况下"功能"会更清晰,可能不那么准确.