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 相关文章推荐
JavaScript 空位补零实现代码
Feb 26 Javascript
JS无限树状列表实现代码
Jan 11 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
提交表单时执行func方法实现代码
Mar 17 Javascript
JQuery中serialize()、serializeArray()和param()方法示例介绍
Jul 31 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
JavaScript生成验证码并实现验证功能
Sep 24 Javascript
Bootstrap 3 进度条的实现
Feb 22 Javascript
JS实现的tab切换选项卡效果示例
Feb 28 Javascript
如何去除vue项目中的#及其ie9兼容性
Jan 11 Javascript
vue-cli中vue本地实现跨域调试接口
Jan 16 Javascript
微信小程序地图绘制线段并且测量(实例代码)
Jan 02 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
DC动画很好看?新作烂得令人发指,名叫《红色之子》
2020/04/09 欧美动漫
安装PHP扩展时解压官方 tgz 文件后没有configure文件无法进行配置编译的问题
2020/08/26 PHP
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
jQuery类选择器用法实例
2014/12/23 Javascript
js中this用法实例详解
2015/05/05 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
JavaScript创建闭包的两种方式的优劣与区别分析
2015/06/22 Javascript
js多功能分页组件layPage使用方法详解
2016/05/19 Javascript
window.open打开窗口被拦截的快速解决方法
2016/08/04 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
JS 中LocalStorage和SessionStorage的使用
2017/08/17 Javascript
Angularjs中的$apply及优化使用详解
2018/07/02 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
elementUI select组件默认选中效果实现的方法
2019/03/25 Javascript
jQuery Migrate 插件用法实例详解
2019/05/22 jQuery
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
Python实现list反转实例汇总
2014/11/11 Python
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
Python设计模式之代理模式实例详解
2019/01/19 Python
Django1.11自带分页器paginator的使用方法
2019/10/31 Python
浅析Python 条件控制语句
2020/07/15 Python
python实现AHP算法的方法实例(层次分析法)
2020/09/09 Python
python简单实现插入排序实例代码
2020/12/16 Python
通过HTML5 Canvas API绘制弧线和圆形的教程
2016/03/14 HTML / CSS
荷兰电脑专场:Paradigit
2018/05/05 全球购物
乔布斯斯坦福大学演讲稿
2014/05/23 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
2014年流动人口工作总结
2014/11/26 职场文书
小学语文复习计划
2015/01/19 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
2015年度绩效考核工作总结
2015/05/27 职场文书
关于环保的宣传稿
2015/07/23 职场文书
Python+Appium新手教程
2021/04/17 Python