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 相关文章推荐
js下弹出窗口的变通
Apr 18 Javascript
document.designMode的功能与使用方法介绍
Nov 22 Javascript
关于javascript function对象那些迷惑分析
Oct 24 Javascript
js中的数组Array定义与sort方法使用示例
Aug 29 Javascript
jQuery自定义事件的简单实现代码
Jan 27 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
javascript如何实现360度全景照片问题汇总
Apr 04 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
Jun 02 Javascript
基于JavaScript 性能优化技巧心得(分享)
Dec 11 Javascript
angularjs 动态从后台获取下拉框的值方法
Aug 13 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
vue-router 手势滑动触发返回功能
Sep 30 Javascript
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字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP中如何防止外部恶意提交调用ajax接口
2016/04/11 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
prototype class详解
2006/09/07 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
jquery异步请求实例代码
2011/06/21 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jquery解析xml字符串示例分享
2014/03/25 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
js如何改变文章的字体大小
2016/01/08 Javascript
TinyMCE汉化及本地上传图片功能实例详解
2016/05/31 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
Javascript 正则表达式校验数字的简单实例
2016/11/02 Javascript
jQuery时间日期三级联动(推荐)
2016/11/27 Javascript
jQuery实现在新增加的元素上添加事件方法案例分析
2017/02/09 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
Vue.js项目部署到服务器的详细步骤
2017/07/17 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
Vue状态模式实现窗口停靠功能(灵动、自由, 管理后台Admin界面)
2020/03/06 Javascript
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
Python实现SSH远程登陆,并执行命令的方法(分享)
2017/05/08 Python
Python IDLE入门简介
2017/12/08 Python
Django框架自定义session处理操作示例
2019/05/27 Python
python使用配置文件过程详解
2019/12/28 Python
Python文件操作基础流程解析
2020/03/19 Python
学习十八大报告感言
2014/02/04 职场文书
护理专科毕业自荐信范文
2014/04/21 职场文书
高三学生评语大全
2014/04/25 职场文书
培训研修方案
2014/06/06 职场文书
教师年终个人总结
2015/02/11 职场文书
大学生党员个人总结
2015/02/13 职场文书
2015政治思想表现评语
2015/03/25 职场文书
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python