以下是一个例子:
function try2RecurseIt() {
var MyArr = [[1,[2,3],4],[5,6],[7,8,[9,0]]];
letsDance(MyArr);
}
function letsDance(arr) {
for (i=0; i<arr.length; i++) {
console.log("arr["+i+"] "+ arr[i]);
if (arr[i].constructor.toString().indexOf("Array") > -1) { // isArray check
letsDance(arr[i]);
}
}
}
我预计它将遍历所有元素,但结果是:
// arr[0] 1,2,3,4
// arr[0] 1
// arr[1] 2,3
// arr[0] 2
// arr[1] 3
某处我的letsDance()
函数失去了上下文,我无法弄清楚在哪里。我究竟做错了什么?
是的,我知道forEach
,但我试图了解我在哪里错了。此外,我将使用此方法来解析不是数组的htmlElements.children[n]
。
我学习JavaScript并且需要在不使用任何库的情况下理解基础知识。
答案 0 :(得分:1)
您的问题是无法将变量保持在本地:
for (i=0; i<arr.length; i++) {
这里, i 在第一个循环中变为全局,因此后续循环增加它,使用:
for (var i=0; i<arr.length; i++) {
答案 1 :(得分:1)
代码中的错误是i
是一个全局变量。因此,对函数的每次调用都会重写相同的i
,并且i
会一直重置为0.