论坛首页 Web前端技术论坛

测试一下你属于哪种人

浏览 2913 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-05-11  
抄自http://www.terrainformatica.com/index.php/?p=32



What will following JavaScript function return?

function test()
  {
    try
    {
      return "I am optimist";
    }
    finally
    {
      return "I am pessimist";
    }
  }

Try to answer as this is a good chance to measure your attitude
   发表时间:2008-05-11  
跟着又有一题:



And what answer will give us following function?
  function test()
  {
    var flavour = "optimistic";
    try
    {
      return flavour = "pessimistic", "I am " + flavour + " optimist";
    }
    finally
    {
      return "I am " + flavour + " pessimist";
    }
  }


0 请登录后投票
   发表时间:2008-05-11  
还有一个变态的:

  function foo()
  {
    try
    {
       try { return 1/0; }  catch(e) { return 2; } finally { return 3; }
    }
    catch(e) { return 4; } finally { return 5; }
  }
0 请登录后投票
   发表时间:2008-05-11  
只要try被执行,不论执行到哪里,finally语句最终都要被执行。

如果try语句中有return、continue、break、throw语句转移控制流离开try语句块的话,要将这个转移做等待,转移前要执行finally语句块的内容。

如果finally语句中有return、continue、break、throw语句转移控制流的话,try/catch中等待的控制流转移将被舍弃而执行finally中的。

所以上两例,都应该是最外层的finally语句的返回值被最终返回,其余的被舍弃。
0 请登录后投票
   发表时间:2008-05-11  
同2楼见解
0 请登录后投票
   发表时间:2008-05-11  
引用
And what answer will give us following function?



返回名称为test的函数?执行test()的结果等于执行返回的那个函数的结果?
0 请登录后投票
   发表时间:2008-05-12  
s79 写道
只要try被执行,不论执行到哪里,finally语句最终都要被执行。

如果try语句中有return、continue、break、throw语句转移控制流离开try语句块的话,要将这个转移做等待,转移前要执行finally语句块的内容。

如果finally语句中有return、continue、break、throw语句转移控制流的话,try/catch中等待的控制流转移将被舍弃而执行finally中的。

所以上两例,都应该是最外层的finally语句的返回值被最终返回,其余的被舍弃。


同意S79
0 请登录后投票
   发表时间:2008-05-13  
一个有意思的问题!

不过好像有点标题党的嫌疑哦!:)
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics