简单理解: 一个函数内部调用自己,这个函数就是递归函数
let num = 0;
function fu() {
console.log("任务打印5句");
//判断条件
if (num == 5) {
//条件完成,return退出循环
return;
}
num++;
fu()
}
fu()
注: 必须有退出条件(return),否报((stack overflow))栈溢出错
需求:输入id返回相应对象数据
//定义数据
let data = [{
id: 1,
name: "家电",
goods: [{
id: 11,
gname: "冰箱",
goods: [{
id: 111,
gname: "手机"
}, {
id: 112,
gname: "电风扇"
}]
}, {
id: 12,
gname: "洗衣机"
}]
}, {
id: 2,
name: "服装"
}];
function fu(json, id) {
let obj = {} //用户返回对象数据
json.forEach(item => {
//console.log(item); 打印两个对象数据
//判断输入id与item.id对应,则返回相应对象
if (item.id == id) {
obj = item;
return item
} else if (item.goods && item.goods.length > 0) {
//判断item.goods 并且 item.goods.length > 0 的对应对象数据
//这里再次调用函数本身,省略遍历
obj = fu(item.goods, id);
}
});
return obj;
}
console.log(fu(data, 1));
console.log(fu(data, 2));
console.log(fu(data, 11));
console.log(fu(data, 12));
console.log(fu(data, 111));
总结:
优点:可以查找/返回多层嵌套数据
缺点: 容易死递归报“栈溢出错误”,必须有退出条件(return退出循环)