递归函数:在函数的内部调用自己,递归函数应该给出口否则就会一直执行
// 递归在函数内部调用自身
var i=10;
function test(){
i--;
if (i<=0) {
return;//出口
}
console.log(i)
test()
}
test();//打印结果9,8,7,6,5,4,3,2,1
var i=10;
function test(){
var a =i--;
if (i<0) {
return;
}
test();
console.log(a);
}// 先由外往内执行,再由内向外执行
test();//最后执行结果为1,2,3,4,5,6,7,8,9,10
//当执行到i-1时,则跳出本次test函数,返回上一个test函数执行下面的代码,代码执行完再跳出,再执行上一个test 函数,知道跳出第一个test函数

若函数不给出口
function test(){
console.log("你好")
test();
}
test();
//打印结果为你好,将会一直执行直到栈区的内存空间全部占满,之后出现:Uncaught RangeError: Maximum call stack size exceeded
//这句话的意思是最大调用栈大小超过
递归的小应用
// 快速排序 - 递归
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;
回调函数:把一个函数当做参数传给另一个函数,然后在另一个函数里面去调用这个函数。就叫做回调函数
// 应用场景:不知道什么时间应用,不知道应用什么函数
function request(fn){
console.log("开始网络请求")
setTimeout(function(){
console.log("得到请求数据");
fn();
},(Math.random()*3+1)*1000);
}
function show(){
console.log("把数据展示在HTML上")
}
function showWomen(){
console.log("把女人展示在HTML上")
}
function showCar(){
console.log("把汽车展示在HTML上")
}
function showArmy(){
console.log("把军事展示在HTML上")
}
request(show);
request(showArmy);
request(showWomen);
request(showCar);
网友评论