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 对象比较实现代码
Apr 27 Javascript
javascript测试题练习代码
Oct 10 Javascript
javascript改变position值实现菜单滚动至顶部后固定
Jan 18 Javascript
javascript ajax 仿百度分页函数
Oct 29 Javascript
使用JQUERY进行后台页面布局控制DIV实现左右式
Jan 07 Javascript
JQuery中操作Css样式的方法
Feb 12 Javascript
js实现点击切换TAB标签实例
Aug 21 Javascript
手机浏览器 后退按钮强制刷新页面方法总结
Oct 09 Javascript
jQuery快速实现商品数量加减的方法
Feb 06 Javascript
vue项目初始化到登录login页面的示例
Oct 31 Javascript
js通过循环多张图片实现动画效果
Dec 19 Javascript
Vue 列表页带参数进详情页的操作(router-link)
Nov 13 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
全国FM电台频率大全 - 13 福建省
2020/03/11 无线电
对Session和Cookie的区分与解释
2007/03/16 PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php模式设计之观察者模式应用实例分析
2019/09/25 PHP
动感效果的TAB选项卡jquery 插件
2011/07/09 Javascript
javascript验证上传文件的类型限制必须为某些格式
2013/11/14 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JavaScript事件学习小结(三)js事件对象
2016/06/09 Javascript
AngularJS操作键值对象类似java的hashmap(填坑小结)
2016/11/12 Javascript
解决JSON.stringify()自动将中文转译成unicode的问题
2018/01/05 Javascript
vue实现全匹配搜索列表内容
2019/09/26 Javascript
jQuery实现弹出层效果
2019/12/10 jQuery
python基础教程之缩进介绍
2014/08/29 Python
深入理解Javascript中的this关键字
2015/03/27 Python
Python中方法链的使用方法
2016/02/23 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
Python使用cx_Oracle调用Oracle存储过程的方法示例
2017/10/07 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python tensorflow基于cnn实现手写数字识别
2018/01/01 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
Python通过format函数格式化显示值
2020/10/17 Python
Solaris操作系统的线程机制
2012/12/23 面试题
非功能性需求都包括哪些方面
2013/10/29 面试题
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
企业总经理岗位职责
2014/02/13 职场文书
财务会计大学生自我评价
2014/04/09 职场文书
幼儿园大班个人总结
2015/02/28 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
人生哲理妙语30条:淡写流年,笑过人生
2019/09/04 职场文书
Java面试题冲刺第十七天--基础篇3
2021/08/07 面试题
Python通用验证码识别OCR库ddddocr的安装使用教程
2022/07/07 Python