Javascript循环在递归中释放上下文

Javascript循环在递归中释放上下文,javascript,loops,recursion,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().inde

下面是一个例子:

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]);
    }
  }
}
在某个地方,我的
letsDance()
函数失去了上下文,我不知道在哪里。我做错了什么

是的,我知道forEach的
forEach
,但我想知道我错在哪里。此外,我将使用此方法解析非数组的
htmlElements.children[n]


我正在学习JavaScript,需要在不使用任何库的情况下了解基本知识。

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

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

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

您说的“失去上下文”是什么意思?每个函数都有自己的执行上下文,这怎么会丢失?是的,我的错,在您更正后它可以正常工作,谢谢!但这是一个示例,我的真实代码仍然不能正确工作(没有全局变量)。我将准备另一个问题。谢谢!最后我发现了真实代码中的错误。当然,我忘了使用“var”(在代码的其他位置,但也会影响传递值)。谢谢你!是的,我的不好,在你更正后它可以正常工作,谢谢!但这是一个例子,我的真实代码仍然不能正确工作(没有全局变量)。我将准备另一个问题。谢谢你!你也应该知道闭包。谷歌“闭包”或搜索“闭包”来理解函数在javascript中是如何工作的。当然我会的。最后我在我的真实代码中发现了错误。当然,我忘记了使用“var”(在代码的其他地方,但也影响传递值)。谢谢你!
for (i=0; i<arr.length; i++) {
for (var i=0; i<arr.length; i++) {