为什么返回类型相同但结果不同

时间:2016-05-05 08:20:55

标签: javascript console console.log

我在java脚本中有两个相同返回类型的函数但返回类型不同。在

下使用snipped id的代码
function foo1()
    {
      return {
          bar: "hello"
      };
    }

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

调用函数..

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

输出结果....

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

3 个答案:

答案 0 :(得分:5)

那是因为JavaScript解释

return
{
    bar: "hello"
};

作为return语句后跟块创建(在运行时被忽略)。不是“返回一个对象”。我真的不知道为什么JavaScript开发者会做出这样的决定。

无论如何,ASI在;之后插入return,产生等效代码:

return;
{
    bar: "hello"
};

return之后的换行是罪魁祸首。如果您想要退货,请不要使用它。

答案 1 :(得分:4)

这里自动插入分号。其余的代码永远不会到达。

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

请查看:Warning: unreachable code after return statement

答案 2 :(得分:0)

一个javascript你可以不用分号但它会自动添加分号,这就是为什么你得到未定义的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());