关于 js 内部原理的两个问题
来源:3-3 电话号码组合-代码演示

hey自然
2019-02-22
-
老师的代码中是
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]
为什么会爆栈?这个我是百思不得其解。还望老师解惑。
写回答
1回答
-
快乐动起来呀
2019-02-24
爆栈的原因是死循环,你看下哪里导致的
012019-02-25
相似问题