javascript - 为什么 JavaScript try/finally 阻塞会导致函数明显返回两次?
问题描述
finally 块总是最后执行,return 语句将控制权返回到函数调用的位置。当在 try/finally 块内部一起使用时,该函数似乎返回两次而不是一次,当在 if-else 块内使用时,finally 块的返回值生效。相同的方法调用是否返回两次?
function print(value) {
console.log(value);
return value;
}
function testWrapped() {
try {
return print(true);
} finally {
return print(false);
}
}
function test() {
try {
return true;
} finally {
return false;
}
}
console.log("Result with wrapped value");
testWrapped();
console.log("Result when used inside an if statement:");
if (test()) {
console.log("true");
} else {
console.log("false");
}
上面的代码产生以下输出:
Result with wrapped value
true
false
Result when used inside an if statement:
false
解决方案
这是因为您正在使用finally
而不是catch
finally 将在 try 或 catch 之后执行。
在条件块中,它将返回最后评估的项目false
,并执行您的 else 块。
见:https ://www.w3schools.com/jsref/jsref_try_catch.asp
try 语句允许您定义一个代码块,以便在执行时对其进行错误测试。
如果 try 块中发生错误,catch 语句允许您定义要执行的代码块。
finally 语句允许您在 try 和 catch 之后执行代码,而不管结果如何。
推荐阅读
- c# - 更新配置文件数据不起作用 asp.net 网络表单
- python - 更改 Anaconda Navigator 默认文件位置
- javascript - React Native - TypeScript 中带有 ref 回调的高阶组件引发编译错误
- r - shinyApp :获取文件夹作为输入,并将文件夹内的文件用作 R 函数的输入
- r - 使用 rowMeans() 进行故障排除 - 'x' 必须是至少包含二维的数组
- apache-kafka - Kafka Stream Reducer 没有减少记录
- android - 在 kotlin 迁移后 Crashitycs 报告错误的行号
- excel - 使用 vba 将文件从不同的文件夹循环复制到另一个文件夹
- java - 河内塔之类的
- android - 如何为所有系统语言启用活动