当在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
由于没有像var
,let
或const
这样的声明,因此您要设置全局变量a和b
如果仅通过分配变量来声明变量(不使用let
,const
,var
或作为函数参数,则该变量是全局的。
标签不执行任何操作,因为您没有从中循环到continue
(或类似的位置)。
这些块什么都不做,因为您没有使用let
或const
来将变量的作用域限制为块。