1-递归函数,即函数在自己里面调用自己。代表表示如下。
function fn(){
fn();
}
fn();
1.1_分析下面代码
var num=1;
function fn(){
console.log('我要打印6句话'+num)
if(num===6){return;};
num++
fn();
};
fn();
执行fn,先打印第一句话,判断否,继续执行,num=2,继续调用函数即打印第二句话,当循环到打印第六句话时,判断条件ture,然后跳出递归,外层的fn()执行完毕。
递归,需要return来跳出,否则将无线循环下去!
1.2_递归练习_求阶层
var num=1;
function fn(n){
num*=n;
n=n-1;
if(n===0){
return;}
fn(n);
}
fn(2);
或者
function fn(n){
if(n==1){return 1;}
return n*fn(n-1);
}
1.3_递归练习_兔子序列
function fn(n){
if(n===1||n===2){return 1;}
return fn(n-1)+fn(n-2);
}
fn(3);
求第三项由前面两项决定,然后递归,最终为1+1。
1.4_递归_遍历数据
1.4.1_forEach(function(e){})
var a=[
{id:1,goods:[{id:1},{id:2}]},
{id:2,goods:[{id:1},{id:2}]},
]
a.foreach(function(e){ console.log(e);});
输出结果为:
{id:1,goods:array(2)}
{id:2,goods:array(2)}
显然,forEach是依次遍历数组的方法,引擎会先看数组的第一个内容执行函数操作,然后再看第二个内容执行函数操作,依次类推。
var a=[
{id:1,goods:[{id:11},{id:12}]},
{id:2,goods:[{id:21},{id:22}]},
]
getid(b,id){
b.forEach(function(e){
if(e.id===id){console.log(e);}
else if(e.goods&&e.goods.length>0){
getid(e.goods,id);
}
})
}
调试:
输出ID为1的对象 console.log(getid(a,1));
但是,写实际项目的时候,不需要打印对象,需要拿到对象。
function getid(arr,id){
var o={};
arr.forEach(function(e){
if(e.id==id){
o=e;
}else if(e.goods&&e.goods.length>0){
o=getid(e.goods,id);
}
}
return o;
);}
前一个o和后一个o属于开辟的不同空间,注意逻辑性。通过上面的代码,可以通过id拿到所需要的对象。