Object literal expression not parsed as such when curly bracket begins on next line [duplicate]

Keywords´╝Ü javascript object-literal

Question: 

This question already has an answer here:

I have two function of same return type in java script but return type is difference. The using code of snipped id below

function foo1()
    {
      return {
          bar: "hello"
      };
    }

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

calling the function..

console.log("foo1 returns:");
console.log(foo1());
console.log("foo2 returns:");
console.log(foo2());

Output the result ....

foo1 returns:
Object {bar: "hello"}
foo2 returns:
undefined 

Answers: 

Its automatic insert of the semicolon here. The rest of code is never reached.

function foo2()
{
  return    // get a automatic semicolon insert here
  {
      bar: "hello"
  };
}

Please have a look: Warning: unreachable code after return statement

That's because JavaScript interprets

return
{
    bar: "hello"
};

as return statement followed by block creation (which is ignored in runtime). Not as "return an object". And I really don't know why JavaScript devs made such decision.

Anyway ASI inserts ; after return resulting in the equivalent code:

return;
{
    bar: "hello"
};

The newline after return is the culprit. Don't use it if you wish to return something.

A javascript free you do without semicolon but it puts a automatic semicolon, that is why you get undefined Refer this

function foo1()
    {
      return {
          bar: "hello"
      };
    }

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