Javascript循环在递归中丢失上下文

时间:2015-01-20 05:05:28

标签: javascript loops recursion

以下是一个例子:

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并且需要在不使用任何库的情况下理解基础知识。

2 个答案:

答案 0 :(得分:1)

您的问题是无法将变量保持在本地:

for (i=0; i<arr.length; i++) {

这里, i 在第一个循环中变为全局,因此后续循环增加它,使用:

for (var i=0; i<arr.length; i++) {

答案 1 :(得分:1)

代码中的错误是i是一个全局变量。因此,对函数的每次调用都会重写相同的i,并且i会一直重置为0.