JS奇怪的行为

时间:2016-03-14 12:03:14

标签: javascript

有人可以帮助我 - 为什么我们在JS片段中有这种行为?

var foo = function() {
    return {
        hi: console.log("foo")
    }
}

var foo1 = function() {
    return 
    {
        hi: console.log("foo1")
    }
}

foo();
foo1();

为什么只打印“foo”?

fiddle

修改 好吧,这是因为自动分号插入,但是

我们有办法强迫JS不执行这种情况吗?

我的意思是,我们可以做一些会在这里引发错误的事情吗?

EDIT2

看起来最好的建议是JShint - 我问here

2 个答案:

答案 0 :(得分:8)

你已经点击了JavaScript的automatic semi-colon insertion。你的第二个块相当于:

var foo1 = function(){
  return;
  {
    hi:console.log("foo1")
  }
}

IE它根本没有返回对象文字(因此console.log没有运行) - 它只是返回undefined

答案 1 :(得分:2)

在foo1中,函数在评估对象之前返回。如果您检查foo1()的输出,则不会返回任何内容这就是大多数javascript样式指南建议对象在与return关键字相同的行上打开的原因。