递归、回调

回调和递归

最近维护项目的时候发现页面会越来越卡,打开控制台调试时发现内存已占满,然后就是打开NetWork,发现里面有一个请求异常的多,于是就开始定位这个请求。(如下图)于是,就有了这篇博客总结

图片

递归函数

所谓递归函数,就是在函数体内直接或者间接的调用自己本身。使用递归如果稍微处理不当,就会进入死循环。书写递归的时候一定要注意书写出口

1
2
3
4
5
6
7
8
9
10
11
// 递归在函数内部调用自身
var i=10;
function test(){
i--;
if (i<=0) {
return;//出口
}
console.log(i)
test()
}
test();//打印结果9,8,7,6,5,4,3,2,1

若递归函数不给出口
1
2
3
4
5
6
7
8
    function test(){
console.log("你好")
test();

}
test();
//打印结果为你好,将会一直执行直到栈区的内存空间全部占满,之后出现:Uncaught RangeError: Maximum call stack size exceeded
//这句话的意思是最大调用栈大小超过

递归的小应用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 快速排序 - 递归
var i=0;
var sum = 0;
function add(num){

var i=num--;
sum += i;
if (num<0) {
return;
}
add(num);
return sum;
}
var res = add(5);
console.log(res);//res=15;
回调函数

回调函数:把一个函数当做参数传给另一个函数,然后在另一个函数里面去调用这个函数。就叫做回调函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 应用场景:不知道什么时间应用,不知道应用什么函数
function request(fn){
console.log("开始网络请求")
setTimeout(function(){
console.log("得到请求数据");
fn();
},(Math.random()*3+1)*1000);
}
function show(){
console.log("数据展示开始")
}
function showWomen(){
console.log("这是一个程序媛的模块")
}
function showCar(){
console.log("这是汽车模块")
}
function showArmy(){
console.log("军事展览区")
}

request(show);
request(showArmy);
request(showWomen);
request(showCar);

总结

①函数内部定义函数—-闭包
②函数内部调用其他函数—函数调用
③函数内部调用参数传过来的函数—-回调函数
④函数内部调用自己这个函数—-递归

-------------本文结束感谢您的阅读-------------