http://msdn.microsoft.com/zh-cn/library/h37wtbc7.aspx

这样的 finally 块的运行速度会很慢并且可能导致混乱。这是有意的吗?

一条语句(returnbreak)会导致对程序的控制离开 finally 块。如果在 trycatch 块中有 returnbreak 语句,这可能会产生意想不到的结果。

finally 块中的代码总是在 try 块中的代码之后运行,如果有错误的话,则在 catch 块中的代码之后运行。例如,如果在 try 块中遇到 return 语句,则在执行 return 语句之前先执行 finally 块。如果在 finally 块中有另一个 return 语句,那么将执行该语句,而不执行最初的 return 语句。若要避免这种可能会导致混淆的情况,请不要在 finally 块中使用 return 语句。

function test() {
try {
return(5);   // Attempt to return 5.
} catch(e) {
print(e);
} finally {
return(10);  // This gets run first, returning 10 instead of 5.
}
}
print(test());     // Prints 10, not 5.

更正此错误

  1. 确保不在 finally 块中使用 returnbreak 语句。

  2. 如果打算在 trycatch 块之后执行 returnbreak 语句,则将它们移到紧跟 finally 块之后的位置。

posted on 2009-03-09 12:55  stg609  阅读(338)  评论(0)    收藏  举报
分享按钮