为什么Const能够在其块范围之外调用?

问题描述 投票:0回答:3

为什么在以下实例中允许调用const。

const pizza = {

    topping1: "ham",
    topping2: "pepperoni"

}

console.log(pizza.topping2);

技术上,“pizza.topping2”在花括号之外。那它为什么有效呢?我想你必须以某种方式调用const,但是,关于const的课程,仅将其用作块级变量。这似乎是一个新手问题(但它)对我来说理解编写语法背后的逻辑非常重要。

javascript syntax
3个回答
1
投票

在当前示例中,花括号{}不创建块范围。它只是用作Object initializer

可以使用新的Object()Object.create()或使用文字符号(初始化符号)来初始化对象。对象初始值设定项是以逗号分隔的列表,其中包含零个或多个属性名称对和对象的关联值,用大括号({})括起来。

根据MDN

块语句(或其他语言中的复合语句)用于对零个或多个语句进行分组。该块由一对花括号分隔,并且可以可选地标记

句法:

{
  StatementList
}

以下代码段将引发错误

{
  const x = 3;
}
console.log(x)

0
投票

console.log的调用与pizza处于相同的词汇范围。

你可以这样想:

{
    const pizza = { ... };
    console.log(pizza.topping1);
}

0
投票

JavaScript使用{ ... }有两个不同的含义:

在表达式上下文中,这些括号是对象文字,用于基于键值对创建对象。

在语句上下文中,它们用于创建块作用域,这是一个语句列表,然后在它们自己的作用域中运行。

 /* statement context */

 const variable = /*expression context */;

 test(/*expression context*/)

在您的情况下,它是一个对象文字,因此const声明在全局scppe中,不会创建其他范围。

© www.soinside.com 2019 - 2024. All rights reserved.