如果总是执行finally,为什么try会返回未更改的值
if finally is always executed, why try returns unchaged value
我有以下代码:
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()));
相关文章:
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- JS验证ajax返回的html中的表单数据
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- AJAX:$_GET不返回任何值
- 如果总是执行finally,为什么try会返回未更改的值
- 与在异步回调链中使用 try catch 块相比,返回异常有什么优势
- try-catch返回未定义的变量