setTimeout的执行效率问题,递归调用适合用setTimeout吗?
在递归调用时调用次数很大时,会导致堆栈溢出,window的堆栈空间为1M,调用函数存储参数,变量,返回值等,占用一定空间大量的话导致溢出 我的解决办法用setTimeout 但是...问题出现了,这样会导致计算会明显滞后 function isEven(num){ if(num===0)return console.log(true); if(num===1)return cosnole.log(false); return isEven(Math.abs(num)-2); } isEven(100); //加setTimeout后 function isEven2(num){ if(num===0)return console.log(true); if(num===1)return cosnole.log(false); return setTimeout(()=>isEven2(Math.abs(num)-2)); } isEvent2(100); //时间明显变慢了,猜测是因为用setTimeout导致的. 难道setTimeout的开销挺大的吗?求解释.
5 回复
setTimeout规定貌似是4ms。 如果你真要用异步,可以用Promise、setImmediate或nextTick。 但是。。。关键是你这个不适合用异步。建议改成循环。