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

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