js函数的递归调⽤⽅法
1.通过函数⾃⾝名字递归调⽤
function sum(num){ if(num<=1){ return 1; }else{
return num+sum(num-1); }}
console.log(sum(5));//15
这种通过函数名字调⽤⾃⾝的⽅式存在⼀个问题:函数的名字是⼀个指向函数对象的指针,如果我们把函数的名字与函数对象本⾝的指向关系断开,这种⽅式运⾏时将出现错误。2.通过arguments.callee调⽤函数⾃⾝
function sum(num){ if(num<=1){ return 1; }else{
return num+arguments.callee(num-1); }}
console.log(sum(5));//15var sumAnother=sum;
console.log(sumAnother(5));//15sum=null;
console.log(sumAnother(5));//15
这种⽅式很好的解决了函数名指向变更时导致递归调⽤时找不到⾃⾝的问题。但是这种⽅式也不是很完美,因为在严格模式下是禁⽌使⽤arguments.callee的。
3.通过函数命名表达式来实现arguments.callee的效果。
var sum=(function(){ 'use strict'
return function fun(num){ if(num<=1){ return 1; }else{
return num+fun(num-1); } }})()
console.log(sum(5));//15var sumAnother=sum;
console.log(sumAnother(5));//15sum=null;
console.log(sumAnother(5));//15
因篇幅问题不能全部显示,请点此查看更多更全内容