请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于 js 内部原理的两个问题

  1. 老师的代码中是 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’ 时候的结果集。老师我这样理解的对么?

  2. 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]为什么会爆栈?这个我是百思不得其解。还望老师解惑。

正在回答 回答被采纳积分+3

1回答

快乐动起来呀 2019-02-24 12:34:01

爆栈的原因是死循环,你看下哪里导致的

0 回复 有任何疑惑可以回复我~
  • 提问者 hey自然 #1
    请问,我的第一个问题 理解的 对么?
    回复 有任何疑惑可以回复我~ 2019-02-25 10:33:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信