【问题标题】:Why does the { position affects this Javascript code?为什么 { 位置会影响此 Javascript 代码?
【发布时间】:2014-03-04 23:07:59
【问题描述】:

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

拿一些写得很好的 Javascript 代码 like this example 的显示模块模式:

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

  return   
  {
    someMethod : myMethod,
    someOtherMethod : myOtherMethod
  };

现在围绕“13 换行错误'return'”出现不少 JS 错误。和 Chrome 调试器中的“Uncaught SyntaxError: Unexpected token :”。

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

我有set it up here in JSFiddle(要使其正常工作,请将“返回”后的 { 移回同一行)

【问题讨论】:

    标签: javascript revealing-module-pattern


    【解决方案1】:

    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】:

      因为ECMA standard section 12.9 声明您不能在return 关键字及其表达式之间有新行。

      退货声明: 返回 ; return [这里没有 LineTerminator] 表达式;

      【讨论】:

        【解决方案3】:

        Javascript 做了一些叫做Automatic semi-colon insertion 的事情,我相信这会影响你的结果。基本上,它看到return 语句在行后没有任何内容,并认为这是行的结尾并返回,结束函数。

        【讨论】:

          【解决方案4】:

          因为 return 需要一个值(或变量),所以当您将大括号放在同一行时,您是在告诉 return a hash 但如果您移动大括号到下一行然后你告诉 return nothing 所以下一行不是预期的。

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

          【讨论】:

          • 一切都是正确的,除了这个:“所以下一行不是预期的”。应该是下一行,但 { foo: 'bar' }; 语句在语法上不正确
          • 编辑为“所以不需要下一行”做一个更解释的答案
          • 好的。 “因为 return 需要一个值(或变量)” --- console.log() 也需要一个表达式,但您可以将其拆分为多行。 “期望一个值”并不意味着它不能放在另一行。
          【解决方案5】:

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

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

          【讨论】:

          • “括号的位置很重要”——不是。表达的位置很重要,而不是大括号。
          • 那篇博文总结得很好,谢谢-我可能需要重新考虑我的格式
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多