为什么可以在其块范围之外调用Const?

时间:2019-03-16 13:55:56

标签: javascript syntax

为什么在以下情况下允许调用const。

const pizza = {

    topping1: "ham",
    topping2: "pepperoni"

}

console.log(pizza.topping2);

从技术上讲,“ pizza.topping2”在花括号之外。那为什么行得通呢?我认为您必须以某种方式调用const,但是有关const的课程仅声明了将其用作块级变量。这似乎是一个新手问题,但是对我而言,理解编写语法背后的逻辑对我来说很重要。

3 个答案:

答案 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中,不会创建其他作用域。