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

实名递归
我们还是先从实名递归说起吧,还是用那个最简单的求阶乘的例子:
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小时内与您取得联系。