假如代码如下  function callback(f) {
    f();
  }   function foo() {
    foo(); //执行1000次左右会发生堆栈溢出的错误, 
    //setTimeout(foo, 0); //永远不会堆栈溢出
  }
 foo()这是什么原理?
请问假如我自己把callback函数也定义成setTimeout这样的,应该怎么写?

解决方案 »

  1.   

    setTimeout 是伪异步执行的,你把函数交给setTimeout处理后,原来的函数不会等待,会继续执行,函数能够结束,资源也就可以释放
    而不用setTimeout的时候,函数必须等待调用的函数返回后才能继续执行,但调用的函数又必须等待下一极函数......这样所有函数都不能结束,资源就一直不释放,故溢出  function callback(f) {
        f();
        setTimeout(function(){callback(f)},0);
      }
      

  2.   

    发重复了,这个我先结了吧。
    谢谢wzs_xyz