浏览器原理学习记录 五

36 阅读1分钟

栈溢出原因

js 每次调用函数就会新建一个上下文环境,推入栈中,如果函数没有执行完,上下文会一直留在栈中直到执行完,所以递归函数会根据递归层数一直往栈中推入新的上下文环境,栈的容量是有限的,最后就会爆栈

写一个不会栈溢出的递归 主要使用蹦床函数

function runStack (n) {
  if (n === 0) return 100;
  return runStack( n- 2);
}
runStack(50000)
function boom(n){
  var m = runStack
  while(m instanceof Function){
    m = m(n)

  }
  console.log(m)
}
function runStack (n) {
  if (n === 0) return 100;
  return runStack.bind(null,n-2);
}
boom(50000)