【问题标题】:Why doesn't this crazy brackety Javascript cause a syntax error?为什么这个疯狂的括号 Javascript 不会导致语法错误?
【发布时间】:2012-06-28 20:18:52
【问题描述】:

我今天在玩一些 Javascript sn-ps,发现这段代码实际上会运行:

{{for(var i = 0; i < 3; i++) {{{{
  alert(i);
}}}}}}

你可以try it out for yourself on jsFiddle

为什么运行时没有任何语法错误?重复的括号是什么意思? Javascript 会忽略重复的花括号吗?

【问题讨论】:

  • 我收到错误“太括号”。你觉得我的翻译有问题吗?
  • @Daniel 你应该禁用 jsLint 上的一些严格性选项。
  • 另外,您可能对stackoverflow.com/q/8618270/707111 感兴趣。
  • 我想重点是“为什么要使规范复杂化?” - 如果有人想投入大量无用的花括号,那就这样吧。否则,您需要 JavaScript 解释器的实现者检查不必要的块作用域级别。然后 IE 当然会做这一切很奇怪,然后什么都不能正常工作..
  • 这个“过于本地化”是怎么回事?啊,人们总是想结束最好的问题。

标签: javascript


【解决方案1】:

它创建了一个新块,实际上是无用的1,因为 JavaScript 没有块范围2

1这是一个美丽的矛盾。
2然而。

【讨论】:

  • 我想说这样的话。但你说得更好,因此+1
【解决方案2】:

{ x++; } 是“Block Statement”。

{{{ x++; }}}是块中的块中的块。

每个块内的代码都被执行。所以在某些地方添加额外的{} 并没有任何作用。

【讨论】:

    【解决方案3】:

    Brackets-within-brackets 只是描述的代码块。您的示例可以扩展到:

    {
        {
            for(var i = 0; i < 3; i++)
            {
                {
                    {
                        { 
                            alert(i); 
                        }
                    }
                }
            }
        }
    } 
    

    这很愚蠢,但很好

    【讨论】:

      猜你喜欢
      • 2012-05-14
      • 2013-02-04
      • 2010-12-09
      • 1970-01-01
      • 2015-05-15
      • 2015-08-02
      • 2021-01-03
      • 2015-06-12
      • 2011-10-27
      相关资源
      最近更新 更多