如果总是执行finally,为什么try会返回未更改的值

if finally is always executed, why try returns unchaged value

本文关键字:返回 try 执行 finally 为什么 如果      更新时间:2023-09-26

我有以下代码:

function f() {
    var a = 5;
    try {
        return a;
    } finally {
        a = 3;
    }
}
console.log(f()); // returns 5 instead of 3, why?
执行return a;时读取a的值,然后执行finally块。读取后更改a的值不会更改返回值。

如果在finally块中写入return 3而不是a = 3,那么您将看到返回值发生了更改。

即使最终块在try之后执行,它也无法更改已返回的值。由于a具有基元类型,已经返回的值与f函数中留下的值没有连接,因为它们是副本,但不再是相同的实例

要证明以上内容,请查看它如何处理通过引用传递的对象:

function f() {
    var a = {value: 5};
    try {
        return a;
    } finally {
        a.value = 3;
    }
}
alert(JSON.stringify(f()));