为什么在以下实例中允许调用const。
const pizza = {
topping1: "ham",
topping2: "pepperoni"
}
console.log(pizza.topping2);
技术上,“pizza.topping2”在花括号之外。那它为什么有效呢?我想你必须以某种方式调用const,但是,关于const的课程,仅将其用作块级变量。这似乎是一个新手问题(但它)对我来说理解编写语法背后的逻辑非常重要。
在当前示例中,花括号{}
不创建块范围。它只是用作Object initializer
可以使用新的
Object()
,Object.create()
或使用文字符号(初始化符号)来初始化对象。对象初始值设定项是以逗号分隔的列表,其中包含零个或多个属性名称对和对象的关联值,用大括号({}
)括起来。
根据MDN
块语句(或其他语言中的复合语句)用于对零个或多个语句进行分组。该块由一对花括号分隔,并且可以可选地标记
句法:
{
StatementList
}
以下代码段将引发错误
{
const x = 3;
}
console.log(x)
对console.log
的调用与pizza
处于相同的词汇范围。
你可以这样想:
{
const pizza = { ... };
console.log(pizza.topping1);
}
JavaScript使用{ ... }
有两个不同的含义:
在表达式上下文中,这些括号是对象文字,用于基于键值对创建对象。
在语句上下文中,它们用于创建块作用域,这是一个语句列表,然后在它们自己的作用域中运行。
/* statement context */
const variable = /*expression context */;
test(/*expression context*/)
在您的情况下,它是一个对象文字,因此const
声明在全局scppe中,不会创建其他范围。