break和continue语句最终导致Nashorn中的块执行

时间:2014-07-13 02:35:26

标签: javascript java-8 nashorn

我很困惑为什么在finally / break之后continue被执行(版本:Java 8更新5)

testTryFinally();

function testTryFinally()
{
  try
  {
    print("Try 1");
    for(var i = 0; i < 2; i++)
    {
      break;
    }  
    print("Try 2");
  }
  finally
  {
    print("Finally executed");
  }
}

执行: .../tmp>jjs test.js

使用break输出:

Try 1
Finally executed
Try 2
Finally executed

使用continue代替break

输出
Try 1
Finally executed
Finally executed
Try 2
Finally executed

我尝试在浏览器中执行相同的代码(将print()替换为console.log()

输出与Firebug中的预期一样

Try 1
Try 2
Finally executed

2 个答案:

答案 0 :(得分:4)

我找到了相关声明here

  

即可。 。 虽然如果已定义,finally将始终执行,try内的某些语句,例如continuebreak,{{1}或者,当发生错误并且没有catch子句时,所有这些都会导致return之后立即执行。 。

但我不会在Firefox中看到这种情况(可能是有充分理由的)

答案 1 :(得分:1)

已于2015年7月14日到期的Java 8u60中修复 https://wiki.openjdk.java.net/pages/viewpage.action?pageId=22937606