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代码(jquery)
Sep 12 Javascript
JQuery弹出层示例可自定义
May 19 Javascript
基于jQuery实现的向下滑动二级菜单效果代码
Aug 31 Javascript
Angular实现跨域(搜索框的下拉列表)
Feb 16 Javascript
js实现做通讯录的索引滑动显示效果和滑动显示锚点效果
Feb 18 Javascript
JS条形码(一维码)插件JsBarcode用法详解【编码类型、参数、属性】
Apr 19 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
Aug 19 Javascript
vuex提交state&amp;&amp;实时监听state数据的改变方法
Sep 16 Javascript
小试SVG之新手小白入门教程
Jan 08 Javascript
关于vue.js中实现方法内某些代码延时执行
Nov 14 Javascript
react 不用插件实现数字滚动的效果示例
Apr 14 Javascript
解决vue页面渲染但dom没渲染的操作
Jul 27 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分页显示制作详细讲解
2006/12/05 PHP
php文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
利用google提供的API(JavaScript接口)获取网站访问者IP地理位置的代码详解
2010/07/24 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
文本域中换行符的替换示例
2014/03/04 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
修改或扩展jQuery原生方法的代码实例
2015/01/13 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
Bootstrap网格系统详解
2016/04/26 Javascript
微信小程序 动态绑定数据及动态事件处理
2017/03/14 Javascript
jQuery遮罩层实例讲解
2017/05/11 jQuery
React学习笔记之条件渲染(一)
2017/07/02 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
Nodejs环境实现socket通信过程解析
2020/07/03 NodeJs
原生小程序封装跑马灯效果
2020/10/21 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
Jupyter notebook远程访问服务器的方法
2018/05/24 Python
详解python读取和输出到txt
2019/03/29 Python
pandas 中对特征进行硬编码和onehot编码的实现
2019/12/20 Python
Python提取视频中图片的示例(按帧、按秒)
2020/10/22 Python
python 基于PYMYSQL使用MYSQL数据库
2020/12/24 Python
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
奥地利智能家居和智能生活网上商店:tink.at
2019/10/07 全球购物
速卖通欧盟:Aliexpress EU
2020/08/19 全球购物
应届生服务员求职信
2013/10/31 职场文书
房屋公证委托书
2014/04/03 职场文书
工地安全质量标语
2014/06/07 职场文书
绿色出行口号
2014/06/18 职场文书
golang 生成对应的数据表struct定义操作
2021/04/28 Golang
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技