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 相关文章推荐
textarea中的手动换行处理的jquery代码
Feb 26 Javascript
Jquery实现图片放大镜效果的思路及代码(自写)
Oct 18 Javascript
SinaEditor使用方法详解
Dec 28 Javascript
微信中一些常用的js方法汇总
Mar 12 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
Jan 18 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
Feb 19 Javascript
微信小程序 出现错误:{&quot;baseresponse&quot;:{&quot;errcode&quot;:-80002,&quot;errmsg&quot;:&quot;&quot;}}解决办法
Feb 23 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
angular2中Http请求原理与用法详解
Jan 11 Javascript
vue-cli3 DllPlugin 提取公用库的方法
Apr 24 Javascript
微信小程序在text文本实现多种字体样式
Nov 08 Javascript
前端开发基础javaScript的六大作用
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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
一个从别的网站抓取信息的例子(域名查询)
2006/10/09 PHP
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
PHP 身份证号验证函数
2009/05/07 PHP
PHP使用ob_start生成html页面的方法
2014/11/07 PHP
php进行md5加密简单实例方法
2019/09/19 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
js prototype 格式化数字 By shawl.qiu
2007/04/02 Javascript
JS启动应用程序的一个简单例子
2008/05/11 Javascript
js身份证验证超强脚本
2008/10/26 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
2010/06/30 Javascript
javascript高级程序设计第二版第十二章事件要点总结(常用的跨浏览器检测方法)
2012/08/22 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
Nodejs关于gzip/deflate压缩详解
2015/03/04 NodeJs
jQuery.each使用详解
2015/07/07 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
ES6中异步对象Promise用法详解
2019/07/31 Javascript
js找出5个数中最大的一个数和倒数第二大的数实现方法示例小结
2020/03/04 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Django框架实现逆向解析url的方法
2018/07/04 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
python 获取图片分辨率的方法
2019/01/08 Python
python binascii 进制转换实例
2019/06/12 Python
python使用tomorrow实现多线程的例子
2019/07/20 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
2019/08/05 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
产品销售计划书
2014/05/04 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
环保建议书作文500字
2015/09/14 职场文书
Pytorch 统计模型参数量的操作 param.numel()
2021/05/13 Python
Pytorch可视化的几种实现方法
2021/06/10 Python