解构会创建一个新变量吗?

Does destructuring create a new variable?

假设我有这个:

const something = {
  someProp: {
    moreProp = 5
  }
}

通过解构我们得到 moreProp:

const { moreProp } = something.someProp

在不解构的情况下得到 moreProp:

const morePropAlias = something.someProp.moreProp

为了访问原始对象中的 moreProp,我们需要 2 次访问。我的问题本质上是我们是否还需要使用解构方式或 none 进行两次访问?

编辑:也许我不够清楚,我的意思是访问 1) 解构的 moreProp 和 2) morePropAlias。换句话说,当我们访问它时,别名 var 不做任何访问(带点),因为我们直接访问它。另一方面,解构对我们来说只是语法糖,所以在幕后它仍然像 something.someProp.moreProp?

一样被访问

在任何一种情况下都会发生两次访问。解构符号并没有以某种方式跳过步骤。

在下面的代码片段中,我用 getter 替换了属性,以便我们可以在执行访问时进行记录:

const something = {
  get someProp() {
    console.log("get someProp");
    return {
      get moreProp() {
        console.log("get moreProp");
        return 5;
      }
    };
  }
};

// Using blocks to get local scopes
{ 
    const moreProp = something.someProp.moreProp;
} 
console.log("----");
{
    const { moreProp } = something.someProp;
}
console.log("----");
{
    const { someProp: { moreProp } } = something;
}

在所有这些不同的符号中,访问次数是相同的。

当您编写 [某些变量 = 访问对象中的数据] 时,如果您每次都需要使用 getter 或简单函数,则您使用对象中的变量(动态创建或非动态创建)创建了变量,它清晰且合乎逻辑......或者也许我不明白你的问题。