return语句必须要注意的地方

先看下面程序:

function foo1()
{
  return { /*返回对象{}他留有一个大括号跟return在同一行*/
      bar: "hello"
  };
}

function foo2()
{
  return 
  {     /*{}没在return同一行所以返回的是undefined*/ 
      bar: "hello"
  };
}
console.log("foo1 returns:");
console.log(foo1());   //{ bar: 'hello' }
console.log("foo2 returns:"); 
console.log(foo2());   //undefined

可以看到,foo1和foo2函数返回对象的开始的大括号一个和return在同一行,foo2不在同一行。

于是,foo2()返回未定义,没有任何错误被抛出。

原因:当foo2()的一行语句中只包含return时,会在return语句后面自动的加上一个分号。后面的语句也是合法的,不会抛出error,尽管它不会调用,也不做任何事(仅仅只是一个没有用到的语句块,它定义了一个等同于’hello’字符串的属性bar而已)。

浏览器会自作主张的在return后面加一个分号。

//foo3和上面的foo2是等价的
function foo3()
{
  return ; //主动加分号
  {     /*{}没在return同一行所以返回的是undefined*/ 
      bar: "hello"
  };
}
console.log(foo3());   //undefined

 所以建议,在JavaScript中将行开头的大括号放置在行尾的约定,而不是在新行的开头。

来源:你必须知道的25道JavaScript核心面试题

25道核心JavaScript面试题 https://www.toptal.com/javascript/interview-questions

原文地址:https://www.cnblogs.com/guorange/p/7218588.html