展平JavaScript数组 - 为什么这不起作用?

pin*_*kes 4 javascript

我试图用随机嵌套的数组来压扁数组.我不确定为什么我写的函数最终会在无限循环中结束:

let array = [1, 2, [3]]
var final_array = [] 

function flattener(array){
  for(i = 0; i < array.length; i++){
    if(array[i] instanceof Array){
      flattener(array[i])
    }else{
      final_array.push(array[i])
    }
  }
}

flattener(array)
Run Code Online (Sandbox Code Playgroud)

我认为应该发生的是:

当我在for循环检查时[3],它进入if语句,flattener再次被调用,它解析,然后我退出if语句.

相反,if语句一直调用[3]无限检查,我不确定为什么会这样.

Cra*_*ile 8

问题是你没有声明i变量,所以它泄漏到全局空间并在递归时被重置.

更改:

for(i = 0; i < array.length; i++){
Run Code Online (Sandbox Code Playgroud)

至:

for(var i = 0; i < array.length; i++){
Run Code Online (Sandbox Code Playgroud)