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

Rod*_*ney 5 javascript revealing-module-pattern

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

拿一些写得很好的Javascript代码,比如 Revealing Module Pattern的这个例子:

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

  return   
  {
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
  };
Run Code Online (Sandbox Code Playgroud)

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

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

我已经在JSFiddle中设置了它 (为了让它工作,将{返回'之后移回到同一行)

Phi*_*ade 9

因为ECMA标准第12.9节规定您不能在return关键字及其表达式之间添加新行.

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


Ry-*_*Ry- 9

JavaScript最糟糕的功能之一是Automatic Semicolon Insertion.

return; // a semicolon is implicitly inserted here
Run Code Online (Sandbox Code Playgroud)

这部分几乎是有效的JavaScript,但不完全,所以你得到一个语法错误:

{
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
};
Run Code Online (Sandbox Code Playgroud)

如果您曾尝试这样做:

return
    [ 1, 2, 3,
      4, 5, 6,
      7, 8, 9 ];
Run Code Online (Sandbox Code Playgroud)

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

这是做什么的?

return a
     + b
     + c;
Run Code Online (Sandbox Code Playgroud)

这个?

return e
     / f /g;
Run Code Online (Sandbox Code Playgroud)

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