Javascript 为什么在for of循环中对该对象进行分解不会';不行?

Javascript 为什么在for of循环中对该对象进行分解不会';不行?,javascript,arrays,loops,object,ecmascript-6,Javascript,Arrays,Loops,Object,Ecmascript 6,基本上,下面的代码不起作用,我不明白为什么。 在嵌套循环中,我有一个名为“children”的变量,它是一个数组,包含具有名为children的字段的对象(例如在DOM树中)。但当我试图分解数组中的每个元素时,它们的名称似乎有冲突。因为我使用let,所以它们应该有不同的作用域(至少,解构变量应该隐藏“父”变量)。很可能我错了,但我想知道为什么 设o={ 儿童:[ {子项:[{},{},{}]}, {子项:[{},{},{}]} ] }; 为了(让{children}of o.children)

基本上,下面的代码不起作用,我不明白为什么。 在嵌套循环中,我有一个名为“children”的变量,它是一个数组,包含具有名为children的字段的对象(例如在DOM树中)。但当我试图分解数组中的每个元素时,它们的名称似乎有冲突。因为我使用let,所以它们应该有不同的作用域(至少,解构变量应该隐藏“父”变量)。很可能我错了,但我想知道为什么

设o={
儿童:[
{子项:[{},{},{}]},
{子项:[{},{},{}]}
]
};
为了(让{children}of o.children){
console.log(子级)
为了(让{儿童}的儿童){
console.log(子级)
}

}
通过使用此语句

for (let {children} of children)
您尝试创建一个新的局部变量,并使用与源相同的命名变量来获取新变量的元素

这不起作用,因为这两个变量之间没有区别

如果重命名目标变量或源变量,它将起作用

设o={
儿童:[
{children:[{},{},{}]},{children:[{},{},{},{}]},
{children:[{},{},{}]},{children:[{},{},{},{}]},
]
};
为了(让{children}of o.children){
console.log(子级)
对于(让{children:c}of children){//在这里重命名
控制台日志(c)
}

}
通过使用此语句

for (let {children} of children)
您尝试创建一个新的局部变量,并使用与源相同的命名变量来获取新变量的元素

这不起作用,因为这两个变量之间没有区别

如果重命名目标变量或源变量,它将起作用

设o={
儿童:[
{children:[{},{},{}]},{children:[{},{},{},{}]},
{children:[{},{},{}]},{children:[{},{},{},{}]},
]
};
为了(让{children}of o.children){
console.log(子级)
对于(让{children:c}of children){//在这里重命名
控制台日志(c)
}

}
您试图从错误的位置获取一个属性
children
。删除循环的第二个
,或重命名变量:

设o={
儿童:[
{子项:[{},{},{}]},
{子项:[{},{},{}]}
]
};
为了(让{children}of o.children){
console.log(儿童);

}
您试图从错误的位置获取一个属性
children
。删除循环的第二个
,或重命名变量:

设o={
儿童:[
{子项:[{},{},{}]},
{子项:[{},{},{}]}
]
};
为了(让{children}of o.children){
console.log(儿童);

}
问题出在
的..的嵌套
中。看到线了吗

for (let {children} of children){...}
在这里,您试图获取
children
children
属性,但该属性没有意义。由于
let{children}
的原因,它创建了一个局部变量
children
,该变量当前未初始化。现在,第二个
子数组
不引用父数组。但它指的是局部范围内未初始化的变量

本例中的代码将抛出一个引用错误

“未捕获引用错误:在初始化之前无法访问“子项”

考虑一个名为
children
的对象,它的属性名也是
children

let children={children:'something'}
{
设{children}=children;

}
问题出在
的..的嵌套
中。看到线了吗

for (let {children} of children){...}
在这里,您试图获取
children
children
属性,但该属性没有意义。由于
let{children}
的原因,它创建了一个局部变量
children
,该变量当前未初始化。现在,第二个
子数组
不引用父数组。但它指的是局部范围内未初始化的变量

本例中的代码将抛出一个引用错误

“未捕获引用错误:在初始化之前无法访问“子项”

考虑一个名为
children
的对象,它的属性名也是
children

let children={children:'something'}
{
设{children}=children;

}
您只有两个级别的
子对象
,但您试图解构三个级别(
o.children
let{children}
,再次
let{children}
)。
让{children}子对象
这将不起作用,并将抛出引用错误,因为在声明之前使用了
{children children code}
,因为它与
子项同名。此外,第二个for循环无法工作,而解构也无法工作,因为在这个级别上,您已经在循环空对象了。为什么您甚至有两个
for…of
循环
let{children}of o.children
已经处理了顶层的
children
键和第二层的
children
您只有两层的
children
,但是您正在尝试解构三层(
o.children
let{children}
),再次
let{children}
)子项的
这将不起作用,并将引发引用错误,因为在声明它之前使用了
{children}
,因为它与
子项同名。此外,第二个for循环无法工作,而解构也无法工作,因为在这个级别上,您已经在循环空对象了。为什么您甚至有两个
for…of
循环
让o.children的{children}
已经处理顶级
子项
键和第二级
子项
作为旁注,您可以添加