我试图用递归方法解构数组。下面是一个简单的示例。一切都很好。
function createNode(index, node) {
let next = node+ 1
if (next < 100) {
for (let i=0; i < 5; i++) {
[index, next] = createNode(index, next)
}
}
return [index, next]
}
createNode(0, 0)
但是,当我将console.log添加到for循环时,它会崩溃。
for (let i=0; i < 5; i++) {
console.log(next)
[index, next] = createNode(index, next)
}
未捕获的TypeError:无法设置未定义的属性“ 99”
问题没有解决。我只想了解并知道是什么原因造成的。我已经搜索了一段时间,老实说,我还不知道。
答案 0 :(得分:0)
您省略了分号
请参见https://stackoverflow.com/a/2846298/4023734
这是您的代码无法正常工作的主要原因。 通常您可以避免这种情况,因为JavaScript会自动为您插入分号。
但是在这种情况下,句子后面是另一个以字符[
所以
console.log(next)
[index, next] = createNode(index, next)
实际上与
相同console.log(next)[index, next] = createNode(index, next)
并且javascript将评估console.log(next)
(返回未定义),然后尝试获取其中的[index, next]
。由于[] index, next
中的表达式是一个逗号分隔的表达式,它的计算结果为最后一个表达式,因此它实际上与next
相同
错误提到99的原因是因为在评估时:
console.log(next)[index, next] = createNode(index, next)
需要在赋值完成之前对右侧进行评估,并且由于它具有递归调用,因此只有在终止情况之后才进行第一次赋值(在下一个<100评估为false之后)
因此,当它出错时,它会尝试评估:
undefined[99] = [0, 100]