为什么{position会影响这个Javascript代码?

时间:2014-03-04 23:08:00

标签: javascript revealing-module-pattern

我在这个Javascript问题上花了相当多的时间(你可以说我是一个JS菜鸟):

使用Revealing Module Pattern的一些编写良好的Javascript代码like this example

运行它工作正常。然后将“{”移动到下一行(作为C#开发人员,我设置了所有环境,将大括号放在新行上)并再次运行。

  return   
  {
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
  };

现在围绕“13 Line break错误'返回'获得了相当多的JS错误。”和Chrome调试器中的“Uncaught SyntaxError:Unexpected token:”。

我的问题是,如何在语法上影响这样的Javascript?

我有set it up here in JSFiddle(为了让它发挥作用,将{返回'后移回到同一行)

5 个答案:

答案 0 :(得分:9)

由于ECMA standard section 12.9表示您无法在return关键字及其表达式之间换行。

    ReturnStatement :
       return ;
       return [no LineTerminator here] Expression ;

答案 1 :(得分:9)

JavaScript最糟糕的功能之一是自动分号插入。

return; // a semicolon is implicitly inserted here

这部分几乎是有效的JavaScript,但并不完全,因此您会收到语法错误:

{
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
};

如果您曾尝试这样做:

return
    [ 1, 2, 3,
      4, 5, 6,
      7, 8, 9 ];

它会一直返回undefined,这本来就很糟糕。 ASI很糟糕,但我们现在仍然坚持使用它,特别是因为无分号代码已成为一种时尚。

这是做什么的?

return a
     + b
     + c;

此?

return e
     / f /g;

好吧,好吧,也许这个人有点做作,也许这不完全是热门话题。但ASI很糟糕。我希望每个人都能得到这个。

答案 2 :(得分:2)

Javascript会执行名为Automatic semi-colon insertion的内容,我相信这会影响您的搜索结果。基本上,它看到return语句后面没有任何内容,并且认为这是该行的结尾并返回,结束了该函数。

答案 3 :(得分:0)

因为返回需要一个值(或变量),当你将大括号放在同一行时,你会告诉返回一个哈希,但如果你移动大括号到下一行然后你告诉什么都不返回所以下一行不是预期的。

修改 在返回的背景下不期望下一行。

答案 4 :(得分:0)

Javascript有一些奇怪的位,一个是括号的位置很重要 - 保持开头一个与代码在同一行

http://encosia.com/in-javascript-curly-brace-placement-matters-an-example/