全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Javascript 实现匿名递归的实例代码

递归是一种常见的编程技巧,实名递归相信大家都不陌生,但如果想要实现匿名递归呢?比如想要返回一个匿名递归函数,又或者是定义一个匿名递归函数并直接调用它,该怎样去做呢?本文将来探讨一下它的实现。

实名递归

我们还是先从实名递归说起吧,还是用那个最简单的求阶乘的例子:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * fact(n - 1);
 }
}
console.log(fact(5));

递归要求自己调用自己,如果函数有名字,这就太简单不过了。

利用变量实现递归

函数还可以赋给一个变量,不过要实现递归,函数体里面还是要依赖这个变量名:

var f = function(n) {
 if (n < 2) {
  return n;
 } else {
  return n * f(n - 1);
 }
}
console.log(f(5));

应该说这种方式跟之前的其实没有本质的不同。

匿名递归

现在我们来探讨匿名递归的实现。

初步设想

如果想要返回一个匿名递归函数,又或者是定义一个匿名递归函数并直接调用它:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * ?(n - 1);
 }
})(5);

如果没有一个名字,代码中那个问号我们就不知道要填写什么,就没法形成递归了,此时我们要怎么办呢?这时就要请出 arguments 对象了。

arguments 对象

在 javascript 的函数中,arguments 对象代表了实际调用时的参数对象。在我们的递归函数中,实际上我们也可以完全不用去定义“形式参数” n:

function factNoParam() {
 if (arguments[0] < 2) {
  return arguments[0];
 } else {
  return arguments[0] * factNoParam(arguments[0] - 1);
 }
}
console.log(factNoParam(5));

只要我们在调用时传入了实际的参数,就可以用 arguments[0] 取得实际传入的这个参数的值。

如果有更多的参数,还可以 arguments[1],arguments[2] 等来取得。

arguments.callee 属性

arguments 可以用来获取参数,相信你可能已经知道了,但 arguments 对象其实还有一个属性,即所谓的 callee。arguments.callee 代表了这个函数本身。这是什么意思呢?其实我们完全可以把 fact 写成这样:

function fact(n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
}
console.log(fact(5));

那么它依然是递归的。因为 arguments.callee 实际就等于 fact。

那么,到了这里,有了这个属性的帮助,要实现匿名递归就不难了,只要把 ? 改为 arguments.callee 即可:

(function (n) {
 if (n < 2) {
  return n;
 } else {
  return n * arguments.callee(n - 1);
 }
})(5);

如果有需要,也可以把它作为匿名递归返回。

关于 javascript 实现匿名递归的介绍就到这里。希望对大家的学习有所帮助,也希望大家多多支持。


# js匿名函数递归  # Javascript匿名递归  # javascript  # 递归函数  # 利用java+mysql递归实现拼接树形JSON列表的方法示例  # JS基于递归算法实现1  # 2  # 3  # 4  # 5  # 6  # 7  # 8  # 9倒序放入数组中的方法  # Vue.js 递归组件实现树形菜单(实例分享)  # JS基于递归实现倒计时效果的方法  # AngularJS递归指令实现Tree View效果示例  # java、js中实现无限层级的树形结构方法(类似递归)  # javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上  # 一个JavaScript递归实现反转数组字符串的实例  # JavaScript中递归实现的方法及其区别  # 递归  # 还可以  # 或者是  # 这是  # 直接调用  # 是一种  # 都不  # 过了  # 就不  # 可以用  # 把它  # 要把  # 这就  # 去做  # 如果没有  # 还有一个  # 应该说  # 就到  # 最简单  # 什么意思 


相关文章: 网站制作话术技巧,网站推广做的好怎么话术?  电商网站制作价格怎么算,网上拍卖流程以及规则?  建站之星伪静态规则如何设置?  php json中文编码为null的解决办法  如何用wdcp快速搭建高效网站?  定制建站流程步骤详解:一站式方案设计与开发指南  微信h5制作网站有哪些,免费微信H5页面制作工具?  建站主机服务器选型指南与性能优化方案解析  代购小票制作网站有哪些,购物小票的简要说明?  如何撰写建站申请书?关键要点有哪些?  如何在VPS电脑上快速搭建网站?  建站主机无法访问?如何排查域名与服务器问题  如何通过NAT技术实现内网高效建站?  如何用已有域名快速搭建网站?  交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?  建站主机选购指南:核心配置优化与品牌推荐方案  建站ABC备案流程中有哪些关键注意事项?  建站之星后台管理系统如何操作?  网站制作企业,网站的banner和导航栏是指什么?  建站之星伪静态规则如何正确配置?  建站之星代理如何获取技术支持?  如何通过西部数码建站助手快速创建专业网站?  建站之星后台密码遗忘如何找回?  C#如何使用XPathNavigator高效查询XML  网站制作新手教程,新手建设一个网站需要注意些什么?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何在万网自助建站平台快速创建网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何在七牛云存储上搭建网站并设置自定义域名?  临沂网站制作企业,临沂第三中学官方网站?  如何快速搭建安全的FTP站点?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  如何配置WinSCP新建站点的密钥验证步骤?  新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?  制作网站怎么制作,*游戏网站怎么搭建?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  如何在西部数码注册域名并快速搭建网站?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  建站之星×万网:智能建站系统+自助建站平台一键生成  ,交易猫的商品怎么发布到网站上去?  ,想在网上投简历,哪几个网站比较好?  威客平台建站流程解析:高效搭建教程与设计优化方案  昆明网站制作哪家好,昆明公租房申请网上登录入口?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  微信推文制作网站有哪些,怎么做微信推文,急? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。