解构会创建一个新变量吗?
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 或简单函数,则您使用对象中的变量(动态创建或非动态创建)创建了变量,它清晰且合乎逻辑......或者也许我不明白你的问题。
假设我有这个:
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 或简单函数,则您使用对象中的变量(动态创建或非动态创建)创建了变量,它清晰且合乎逻辑......或者也许我不明白你的问题。