【初级,可进阶高级】调用栈溢出问题

以下这段代码,可能存在什么问题?如何改进?

function runStack (n) {
  if (n === 0) return 100;
  return runStack(n - 2);
}
runStack(50000)
1
2
3
4
5

答:会导致栈溢出。改为:

function runStack (n) {
  if (n === 0) return 100;
  return runStack.bind(null, n - 2); // 注意:这里返回一个新的函数,且预置参数
}
// 蹦床函数,避免递归
function trampoline(f) {
  while (f && f instanceof Function) {
    f = f();
  }
  return f;
}
trampoline(runStack(1000000))
1
2
3
4
5
6
7
8
9
10
11
12