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 使用技巧精萃(.net html
Apr 25 Javascript
jquery的extend和fn.extend的使用说明
Jan 09 Javascript
JavaScript 中的日期和时间及表示标准介绍
Aug 21 Javascript
javascript判断移动端访问设备并解析对应CSS的方法
Feb 05 Javascript
js实现跨域的方法实例详解
Jun 24 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
js鼠标单击和双击事件冲突问题的快速解决方法
Jul 11 Javascript
JavaScript运动框架 链式运动到完美运动(五)
May 18 Javascript
AngularJs分页插件使用详解
Jun 30 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
react+redux仿微信聊天界面
Jun 21 Javascript
Vue两种组件类型:递归组件和动态组件的用法
Aug 06 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 一元分词算法
2009/11/30 PHP
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
用javascript实现的激活输入框后隐藏初始内容
2007/06/29 Javascript
有效的捕获JavaScript焦点的方法小结
2009/10/08 Javascript
flexigrid 参数说明
2010/11/23 Javascript
Jquery ajax传递复杂参数给WebService的实现代码
2011/08/08 Javascript
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
JS通过相同的name进行表格求和代码
2013/08/18 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
JS中input表单隐藏域及其使用方法
2017/02/13 Javascript
十大热门的JavaScript框架和库
2017/03/21 Javascript
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
webpack中如何加载静态文件的方法步骤
2019/05/18 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
selenium 反爬虫之跳过淘宝滑块验证功能的实现代码
2020/08/27 Javascript
python3使用smtplib实现发送邮件功能
2018/05/22 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
python调用jenkinsAPI构建jenkins,并传递参数的示例
2020/12/09 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
如何现实servlet的单线程模式
2014/08/05 面试题
物业经理求职自我评价
2013/09/22 职场文书
浙江文明网签名寄语
2014/01/18 职场文书
校园安全演讲稿
2014/05/09 职场文书
2014年社区居委会主任重阳节讲话稿
2014/09/25 职场文书
zabbix agent2 监控oracle数据库的方法
2021/05/13 Oracle
python爬取某网站原图作为壁纸
2021/06/02 Python