nodeis 避免回调引起的栈溢出 Maximum call stack size exceeded

//如果这样写,会发生栈溢出
var i = 1;
function isEven() {
     console.log(i++);
// return isEven();
 
     return process.nextTick(
     function () {
     return isEven();
         }
     )
}

 

//不同的javascript引擎报错可能不同
//Outputs: Uncaught RangeError: Maximum call stack size exceeded
//报错时,i每次都是固定的(我的是20900),
 
console.log(isEven());
 
 
//这样写就不会,因为 process.nextTick()定义的调用会创建一个新的子堆栈,所以不会发生栈溢出
var i = 1;
function isEven() {
     console.log(i++);
 
     return process.nextTick(
     function () {
     return isEven();
         }
     )
}

posted on 2018-04-04 17:22  吉晨  阅读(305)  评论(0编辑  收藏  举报

导航