报错:堆栈溢出
常见原因:
1、函数名使用关键字
2、无限递归或死循环
3、......
一般处理方法:
1、函数命名规范
2、循环或递归:设置边界条件、及时return/break
3、有边界条件还是报错,例如:
//假定有一万个数据需要处理
var count = 0;
var total = 10000;
//func
function addPoints(){
console.log('当前个数:',count);
//如果小于总数
if(count<total){
//处理方法
addPointCallBack();
}
}
//func
function addPointCallBack() {
//后续处理逻辑
count++;
//继续打点
addPoints();
}
//调用
addPoints();
以上代码看起来很正常,因为设置了边界10000个数据,所以不存在“无限”的情况。实际结果如下:
如何处理?思路:每处理2000个数据,停顿2秒,然后再继续执行
var count = 0;
var total = 10000;
//模拟sleep
function sleep(millisecond) {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, millisecond)
})
}
//自增方法
async function addPoints(){
console.log('当前个数:',count);
if(count>0&&count%2000==0){
console.log('超出2000点位,进入sleep')
await sleep(2000);
console.log('退出sleep')
}
//如果小于总数
if(count<total){
addPointCallBack();
}
}
//方法回调
function addPointCallBack() {
count++;
addPoints();
}
addPoints();
效果如下: