老师的代码中是 if (arr.length > 1) { comb(arr) } else { return tmp } return arr[0]
我当时自己做的时候的代码是 if (arr.length > 1) { comb(arr) } return tmp
当时的思路是 既然当 arr.length 为1的时候 tmp 就一定是最终返回的结果嘛,结果当输入的 字符串大于两个的时候,比如输入 ‘2345’,却总是返回 '23’的结果集,后来想了想,这应该是由于闭包导致的,每次运行 comb()这个函数, 当前函数作用域中的 tmp 都被推到栈顶,当结束递归,即 arr.length 为1的时候,tmp这个 临时变量依次被 pop出栈,二栈底的 tmp 就是 最初的 ‘23’ 时候的结果集。老师我这样理解的对么?
arr.splice(0, 2, tmp) if (arr.length > 1) { comb(arr) } else { return tmp } return arr[0]
如果 我把 代码 改成 let currentArr = arr.splice(0, 2, tmp) if (currentArr.length > 1) { comb(currentArr) } else { return tmp } return arr[0]
为什么会爆栈?这个我是百思不得其解。还望老师解惑。