5

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

使用一些编写良好的 Javascript 代码,例如显示模块模式的示例:

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

  return   
  {
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
  };

现在它在“13 换行错误'return'”周围出现了相当多的 JS 错误。和 Chrome 调试器中的“Uncaught SyntaxError: Unexpected token :”。

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

我已经在 J​​SFiddle 中设置了它 (为了让它工作,将“返回”之后的 { 移回同一行)

4

5 回答 5

9

因为ECMA 标准第 12.9 节规定您不能在return关键字和它的表达式之间有一个新行。

    退货声明:
       返回 ;
       return [这里没有 LineTerminator] 表达式;
于 2014-03-04T23:11:56.503 回答
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不好。我希望每个人都能得到它。

于 2014-03-04T23:12:14.733 回答
2

Javascript 做了一些叫做自动分号插入的事情,我相信这会影响你的结果。基本上,它看到该return行后面没有任何内容的语句,并认为这是行的结尾并返回,结束函数。

于 2014-03-04T23:11:28.943 回答
0

因为return需要一个值(或变量),所以当您将花括号放在同一行时,您会告诉return 一个哈希值,但是如果您将花括号移到下一行,那么您会告诉return nothing所以不需要下一行.

编辑 在返回的上下文中不需要下一行。

于 2014-03-04T23:10:51.990 回答
0

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

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

于 2014-03-04T23:13:14.123 回答