为什么在对象外部使用属性定义语法不是语法错误?

Why isn't using property definition syntax outside of an object a syntax error?

我在 David Shariff's JavaScript quiz 上看到了这段代码,很惊讶这不是语法错误:

var bar = 1,
    foo = {};

foo: {
    bar: 2;
    baz: ++bar;
};
foo.baz + foo.bar + bar;

如何在任何对象之外使用 name: value 语法?

这不是name: value;这是 label: statement。在 MDN 查看更多信息。此代码等效于:

var bar = 1,
    foo = {};

{
  2;
  ++bar;
};

foo.baz + foo.bar + bar;

本例中的 foo:label。它在这种情况下不是很有用,因为附近没有任何循环,但它是有效的语法。

请注意,foo: 标签未以任何方式链接到 foo 变量。直接跟在标签后面的结构只是一个块,奇怪的是,它包含另外两个标签:bar:baz:,后面跟着两个同样简单的语句。

因此,foo 对象仍然是空的,并且您的最后一行没有按您预期的方式工作。最后一行的结果,也就是测验问题的答案,是