javascript递归函数怎么调用自身?

javascript递归函数怎么调用自身?下面本篇文章给大家介绍一下Javascript递归函数中调用自身的写法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

①一般的通过名字调用自身

function sum(num){
  if(num<=1){
    return 1;
  }else{
    return num+sum(num-1);
  }
}

console.log(sum(5));//15

这种通过函数名字调用自身的方式存在一个问题:函数的名字是一个指向函数对象的指针,如果我们把函数的名字与函数对象本身的指向关系断开,这种方式运行时将出现错误。

function sum(num){
  if(num<=1){
    return 1;
  }else{
    return num+sum(num-1);
  }
}
console.log(sum(5));//15

var sumAnother=sum;
console.log(sumAnother(5));//15

sum=null;
console.log(sumAnother(5));//Uncaught TypeError: sum is not a function(…)

②通过arguments.callee调用函数自身

function sum(num){
  if(num<=1){
    return 1;
  }else{
    return num+arguments.callee(num-1);
  }
}
console.log(sum(5));//15

var sumAnother=sum;
console.log(sumAnother(5));//15

sum=null;
console.log(sumAnother(5));//15

这种方式很好的解决了函数名指向变更时导致递归调用时找不到自身的问题。但是这种方式也不是很完美,因为在严格模式下是禁止使用arguments.callee的。

function sum(num){
  'use strict'
  
  if(num<=1){
    return 1;
  }else{
    return num+arguments.callee(num-1);
  }
}
console.log(sum(5));
//Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not
// be accessed on strict mode functions or the arguments objects for calls to them(…)

③通过函数命名表达式来实现arguments.callee的效果。

var sum=(function f(num){
  'use strict'
  
  if(num<=1){
    return 1;
  }else{
    return num+f(num-1);
  }
});

console.log(sum(5));//15

var sumAnother=sum;
console.log(sumAnother(5));//15

sum=null;
console.log(sumAnother(5));//15

这种方式在严格模式先和非严格模式下都可以正常运行。

更多web前端开发知识,请查阅 HTML中文网 !!

以上就是javascript递归函数怎么调用自身?的详细内容,更多请关注易知道|edz.cc其它相关文章!

推荐阅读

    2010年底DIY硬件总结和安装参考

    2010年底DIY硬件总结和安装参考,,它似乎只是一眨眼的功夫从过去的最后一眼。看看现在的岗位似乎就在昨天,但看看当年的内容是真的走了,如果

    联想垫a2207如何调用a2207平板评价

    联想垫a2207如何调用a2207平板评价,,联想a2207垫在1600 3G双网双待平板电脑的位置。作为以前的热门产品a2107升级版,a2207处理器取得了可观

    保存硬盘上的数据,谁更有价值

    保存硬盘上的数据,谁更有价值,,常用的数据存储方式有两种:硬盘和光盘。用户或多或少对自己说,好的有很多人。争了,不知道你是否有账户的账号,两

    谁是最好的价值500元

    谁是最好的价值500元,,测试总结和购买建议: CPU性能,Phenom II X4 955领先遥遥领先 我们总结了前面的CPU性能测试成绩与实际游戏测试与f

    19英寸/22英寸宽屏更有价值

    19英寸/22英寸宽屏更有价值,,两种流行LCD现状及未来趋势 2006宽屏后;的洗礼,宽屏液晶显示器已经成为市场的主要力量,这是一个不争的事实。这

    高成本5000元保存最有价值游戏平台

    高成本5000元保存最有价值游戏平台,,一般来说,高性能的产品也有很高的价格,用户将不得不付出巨大代价来保存一套强大的配置。然而,这次与以往

    2500元价值小于家用电脑配置推荐蛇

    2500元价值小于家用电脑配置推荐蛇,,新的一年是蛇年已经开始了,我相信很多年轻的朋友有很多红包和压岁钱,对于没有电脑的朋友,可以在红包内开