javascript 如何允许对象键类型语法而不在文字中包含 ir 以及其中的变量声明?

How javascript allows object key type syntax without including ir inside a literal and also variable declaration inside it?

虽然 运行 这些语句在 chrome 控制台或内部脚本标记中,但我发现以下我认为无效的语法正在工作,并且所有变量都在全局公开,我理解可以由于花括号被解释为块,但那个关键:前面是让我困惑的地方。但我不确定为什么,正在寻找解释。

    foo: {
      a = 5,
      b = 6
    }

    console.log(a) output --->  5
    console.log(b) output --->  6


    foo: {
      a = 5;
      b = 6;
    }

    console.log(a) output --->  5
    console.log(b) output --->  6


    foo: {
      a: 5;
      b: 6;
    }

    console.log(a) output --->  5
    console.log(b) output --->  6

那是因为 foo: 被解释为标签,而您的 "ObjectLiteral" get 被解释为块,并且执行其中的语句。

您的代码归结为以下内容。

a = 5,
b = 6

因为您没有像 varletconst 这样的声明,所以您正在设置一个全局变量 ab

如果你只是通过赋值来声明一个变量(不使用 letconstvar 或作为函数参数),那么它是全局的。

标签什么都不做,因为你没有循环到 continue(或类似的)。

这些块什么都不做,因为您没有使用 letconst,它们会将变量的范围限定为块。