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 相关文章推荐
url 编码 js url传参中文乱码解决方案
Apr 11 Javascript
jQuery中获取Radio元素值的方法
Jul 02 Javascript
Jquery实现的一种常用高亮效果示例代码
Jan 28 Javascript
浅谈jquery回调函数callback的使用
Jan 30 Javascript
Jquery揭秘系列:ajax原生js实现详解(推荐)
Jun 08 Javascript
jQuery-mobile事件监听与用法详解
Nov 23 Javascript
纯javascript版日历控件
Nov 24 Javascript
使用snowfall.jquery.js实现爱心满屏飞的效果
Jan 05 Javascript
js实现简单的计算器功能
Jan 16 Javascript
JS实现unicode和UTF-8之间的互相转换互转
Jul 05 Javascript
vue-cli配置文件——config篇
Jan 04 Javascript
原生JS实现$.param() 函数的方法
Aug 10 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/10/09 PHP
php 指定范围内多个随机数代码实例
2016/07/18 PHP
PHP的PDO大对象(LOBs)
2019/01/27 PHP
laravel5.0在linux下解决.htaccess无效和去除index.php的问题
2019/10/16 PHP
php + ajax 实现的写入数据库操作简单示例
2020/05/16 PHP
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
关于JS控制代码暂停的实现方法分享
2012/10/11 Javascript
借助script进行Http跨域请求:JSONP实现原理及代码
2013/03/19 Javascript
Jquery实现图片左右自动滚动示例
2013/09/25 Javascript
JavaScript伸缩的菜单简单示例
2013/12/03 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jQuery Migrate 1.1.0 Released 注意事项
2014/06/14 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
浅谈Javascript的静态属性和原型属性
2015/05/07 Javascript
JavaScript中this的四个绑定规则总结
2016/09/26 Javascript
JavaScript获取短信验证码(周期性)
2016/12/29 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
Vue开发Html5微信公众号的步骤
2019/04/11 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
python正则表达式抓取成语网站
2013/11/20 Python
解决Django migrate不能发现app.models的表问题
2019/08/31 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
python实现扫雷游戏
2020/03/03 Python
css3 border-image使用说明
2010/06/23 HTML / CSS
Etam德国:内衣精品店
2019/08/25 全球购物
函授生自我鉴定
2014/03/25 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
同学聚会策划方案
2014/06/06 职场文书
公司门卫岗位职责范本
2014/07/08 职场文书
个人工作总结范文2014
2014/11/07 职场文书
司机岗位职责范本
2015/04/10 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android