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