全网整合营销服务商

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

免费咨询热线: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中递归实现的方法及其区别  # 递归  # 还可以  # 或者是  # 这是  # 直接调用  # 是一种  # 都不  # 过了  # 就不  # 可以用  # 把它  # 要把  # 这就  # 去做  # 如果没有  # 还有一个  # 应该说  # 就到  # 最简单  # 什么意思 


相关文章: 魔毅自助建站系统:模板定制与SEO优化一键生成指南  广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?  如何优化Golang Web性能_Golang HTTP服务器性能提升方法  高性能网站服务器部署指南:稳定运行与安全配置优化方案  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  图册素材网站设计制作软件,图册的导出方式有几种?  如何在西部数码注册域名并快速搭建网站?  如何快速搭建高效香港服务器网站?  如何通过VPS建站实现广告与增值服务盈利?  盘锦网站制作公司,盘锦大洼有多少5G网站?  如何选择最佳自助建站系统?快速指南解析优劣  如何在阿里云完成域名注册与建站?  如何在Windows环境下新建FTP站点并设置权限?  如何在万网开始建站?分步指南解析  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  如何通过.red域名打造高辨识度品牌网站?  制作农业网站的软件,比较好的农业网站推荐一下?  如何解决ASP生成WAP建站中文乱码问题?  建站之星如何开启自定义404页面避免用户流失?  网站制作公司广州有几家,广州尚艺美发学校网站是多少?  建站OpenVZ教程与优化策略:配置指南与性能提升  网站制作员失业,怎样查看自己网站的注册者?  如何通过VPS搭建网站快速盈利?  建站主机系统SEO优化与智能配置核心关键词操作指南  建站主机SSH密钥生成步骤及常见问题解答?  制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?  想学网站制作怎么学,建立一个网站要花费多少?  网站制作价目表怎么做,珍爱网婚介费用多少?  如何快速搭建支持数据库操作的智能建站平台?  c++ stringstream用法详解_c++字符串与数字转换利器  网站设计制作公司地址,网站建设比较好的公司都有哪些?  如何在建站之星网店版论坛获取技术支持?  如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?  如何快速辨别茅台真假?关键步骤解析  昆明高端网站制作公司,昆明公租房申请网上登录入口?  网站设计制作企业有哪些,抖音官网主页怎么设置?  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在阿里云香港服务器快速搭建网站?  油猴 教程,油猴搜脚本为什么会网页无法显示?  如何在搬瓦工VPS快速搭建网站?  企业微网站怎么做,公司网站和公众号有什么区别?  如何快速搭建高效服务器建站系统?  如何正确选择百度移动适配建站域名?  视频网站app制作软件,有什么好的视频聊天网站或者软件?  安徽网站建设与外贸建站服务专业定制方案  如何快速配置高效服务器建站软件?  如何用西部建站助手快速创建专业网站?  子杰智能建站系统|零代码开发与AI生成SEO优化指南  ,怎么在广州志愿者网站注册? 

您的项目需求

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