在chrome控制台或script标记中运行这些语句时,我发现以下我认为无效的语法正在工作,并且所有可变变量都被全局暴露,我知道这可能是因为大括号被解释为块,但前面的键让我很困惑。但我不知道为什么,正在寻找解释。
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
由于您没有任何像var
、let
或const
这样的声明,因此您正在设置一个全局变量a和b
如果只通过赋值(不使用let
、const
、var
或作为函数参数(来声明变量,则它是全局的。
标签不起任何作用,因为您没有从中循环到continue
(或类似内容(。
这些块什么也不做,因为您没有使用let
或const
,它们将变量范围限定为块。