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