Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

return之后还可以执行代码?

  昨天有个朋友给我看了一段奇怪的代码,顿时我和我的小伙伴们都惊呆了!使用try语句时我们通常只配合catch关键字来使用,而把finally关键字给忽略了。实际上try-catch-finally整个才是一个完整的语句,那么即使在try中就return,finally也要执行。
console.log(function(){
  try{
    return "returned";
  }finally{
    console.log("finally");
  };
}());

  也许看到这个结果还是不以为然,觉得是finally先执行了才执行的return。但实际上确实是return先执行的,可以做以下测试。 var r=function(){
  var x=0;
  try{
    return x;
  }finally{
    console.log("finally");
    console.log(++x);
  };
}();
console.log("returned");
console.log(r);

  如果是finally先执行的,那么由于finally中给x的值加了1,return就不会再返回0了。但是finally确实是执行了,而且输出的值是1,这只能说明它是在return之后执行的。因此使用这个手法return后便有可能再执行代码。那么,如果有两个return会怎么样呢? console.log(function(){
  try{
    return 1;
  }finally{
    return 2;
  };
}());
  这我就不截图了,它的输出结果是2,也就是说使用了后执行的return。这就可以想到另一种情况,在try系列语句中,return的值被暂存到了某个地方,之后try系列语句整个执行完后才会return最终结果。当然,如果不存在return语句,try系列语句也不会return的。
  所以在try系列语句中的return,和函数直接的return是有区别的。
网名:
3.80.32.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^