为什么foo2()在这里返回undefined?

时间:2017-01-06 09:37:34

标签: javascript function return

为什么我没有在js中的以下两个函数中获得相同的输出。

    foo1 (){
    return {
        bar:"hello" 
      };
    }
    foo2 (){
      return
      {
        bar:"hello"
      };
    }
    console.log("foo1 returns:");
    console.log(foo1());
    console.log("foo2 returns:");
    console.log(foo2());

2 个答案:

答案 0 :(得分:2)

原因是JS中的可选分号。

JS会像这样对待你的代码:

foo2 () {
  return ;
  {
    bar:"hello"
  };
}

JS中的许多分号都是可选的。有时这是一个优势(例如,参见代码高尔夫)。但在像你这样的其他场合,这会导致意外错误。

foo1()中,您在返回后有一个空缺{,因此解析器将首先尝试查找相应的结束}。但是,在foo2()中,解析器没有理由猜测应该有更多要解析的内容,所以它只是插入(可选的)分号并按原样运行代码。下一行中的对象是完全(语法上)有效的代码 - 没有理由隐式更改它的任何内容。

答案 1 :(得分:1)

检查一下,

function foo1() {
   return {
     bar: "hello"
   };
 }
 function foo2() {
   return {
     bar: "hello"
   };
 }
 console.log("foo1 returns:");
 console.log(foo1());
 console.log("foo2 returns:");
 console.log(foo2());

工作?

如果是功能,请告诉它它是一个功能。