JavaScript递归函数定义与用法实例分析


Posted in Javascript onJanuary 24, 2019

本文实例讲述了JavaScript递归函数定义与用法。分享给大家供大家参考,具体如下:

递归函数是一个函数通过名字调用自身的情况下形成的,比如经典的递归阶乘函数:

function factorial(num) {
  if (num <= 1) {
    return 1;
  } else {
    return num * factorial(num - 1);
  }
}

上面的这种写法,可能会造成问题:

var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));//出错

因为 factorial 函数定义内部使用了自身的函数名,所以当 factorial 被置为 null 后,factorial 已不是函数,自然报错啦 O(∩_∩)O~。

可以使用 arguments.callee 指向正在执行的函数的指针来避免上面出现的问题:

function factorial(num) {
  if (num <= 1) {
    return 1;
  } else {
    return num * arguments.callee(num - 1);
  }
}
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));

运行结果:24

但在严格模式下,不能访问 arguments.callee,但可以使用命名函数表达式来实现上述功能:

var factorial = (
    function f(num) {
      if (num <= 1) {
        return 1;
      } else {
        return num * f(num - 1);
      }
    }
);
var anotherFactorial = factorial;
factorial = null;
console.log(anotherFactorial(4));

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
不用ajax实现点击文字即可编辑的方法
Dec 16 Javascript
js模拟弹出效果代码修正版
Aug 07 Javascript
JavaScript 学习技巧
Feb 17 Javascript
动态加载dtree.js树treeview(示例代码)
Dec 17 Javascript
jQuery实现炫酷的鼠标轨迹特效
Feb 01 Javascript
推荐10 个很棒的 jQuery 特效代码
Oct 04 Javascript
Node.js项目中调用JavaScript的EJS模板库的方法
Mar 11 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
Nov 01 Javascript
JS前向后瞻正则表达式定义与用法示例
Dec 27 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
Mar 02 Javascript
深入理解移动前端开发之viewport
Oct 19 Javascript
jQuery实现日历效果
Sep 11 jQuery
jQuery实现当拉动滚动条到底部加载数据的方法分析
Jan 24 #jQuery
vue结合element-ui使用示例
Jan 24 #Javascript
VUE+Element环境搭建与安装的方法步骤
Jan 24 #Javascript
JS实现带阴历的日历功能详解
Jan 24 #Javascript
微信小程序webview实现长按点击识别二维码功能示例
Jan 24 #Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变rgba的a值实现)
Jan 24 #Javascript
微信小程序MUI导航栏透明渐变功能示例(通过改变opacity实现)
Jan 24 #Javascript
You might like
简单的php 验证图片生成函数
2009/05/21 PHP
php开发留言板的CRUD(增,删,改,查)操作
2012/04/19 PHP
如何让搜索引擎抓取AJAX内容解决方案
2014/08/25 PHP
php中运用http调用的GET和POST方法示例
2014/09/29 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
PHP实现四种基础排序算法的运行时间比较(推荐)
2016/08/11 PHP
Thinkphp 框架基础之源码获取、环境要求与目录结构分析
2020/04/27 PHP
jquery validate.js表单验证的基本用法入门
2010/05/13 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
Android中资源文件(非代码部分)的使用概览
2012/12/18 Javascript
javascript实现tabs选项卡切换效果(扩展版)
2013/03/19 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
jquery实现邮箱自动填充提示功能
2015/11/17 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
vue中动态绑定表单元素的属性方法
2018/02/23 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
用C++封装MySQL的API的教程
2015/05/06 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
python处理RSTP视频流过程解析
2020/01/11 Python
python里glob模块知识点总结
2021/01/05 Python
The North Face北面荷兰官网:美国著名户外品牌
2019/10/16 全球购物
Ever New美国:澳大利亚领先的女装时尚品牌
2019/11/28 全球购物
招标授权委托书样本
2014/09/23 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
2015年小学重阳节活动总结
2015/07/29 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Python编写nmap扫描工具
2021/07/21 Python