JavaScript递归操作实例浅析

 更新时间:2016年10月31日 11:51:07   作者:梁龙飞  
这篇文章主要介绍了JavaScript递归操作,由一个阶乘问题开始分析了递归操作的原理、实现方法与相关注意事项,需要的朋友可以参考下

本文实例分析了JavaScript递归操作。分享给大家供大家参考,具体如下:

问题

一个简单的递归,求n的阶乘:

function factorial(n){
  if (n<=1)
  {
    return 1;
  }else{
    return factorial(n-1)*n;
  }
}

如果像下面这样使用它,则会出错:

var fcopy = factorial;
factorial = null;
alert(fcopy(3));

因为fcopy指向的函数实体调用了factorial,而factorial已经被释放。

解决的办法

使用arguments.callee

执行流进入函数时会创建函数的运行环境(作用域链等),包括 arguments 这个特殊对象,arguments对象有个属性指向函数本身:arguments.callee 。

function factorial(n){
  if (n<=1)
  {
    return 1;
  }else{
    return arguments.callee(n-1)*n;
  }
}

不过callee在严格模式下不可用。

使用函数表达式

var factorial = (function f(n){
  if (n<=1)
  {
    return 1;
  }else{
    return f(n-1)*n;
  }
})

这并非使用了什么新的技术,只是在原来概念上的一种应用,在定义 factorial 时,直接创建一个函数,再将此函数的引用赋值给factorial。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript遍历算法与技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • 理解javascript中的回调函数(callback)

    理解javascript中的回调函数(callback)

    这篇文章主要介绍了理解javascript中的回调函数(callback),本文着重于对回调函数概念的理解,需要的朋友可以参考下
    2014-09-09
  • Javascript数组与字典用法分析

    Javascript数组与字典用法分析

    这篇文章主要介绍了Javascript数组与字典用法,以实例形式较为详细的分析了Array作为数组与字典的不同用法,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • JavaScript DOMContentLoaded事件案例详解

    JavaScript DOMContentLoaded事件案例详解

    这篇文章主要介绍了JavaScript DOMContentLoaded事件案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • ES6知识点整理之对象解构赋值应用示例

    ES6知识点整理之对象解构赋值应用示例

    这篇文章主要介绍了ES6知识点整理之对象解构赋值应用,结合实例形式分析了ES6对象解构赋值相关概念、原理、出现的问题及相应解决方法,需要的朋友可以参考下
    2019-04-04
  • js+css实现文字散开重组动画特效代码分享

    js+css实现文字散开重组动画特效代码分享

    这篇文章主要介绍了js+css实现文字散开重组动画特效,需要的朋友可以参考下
    2015-08-08
  • 微信小程序分包加载的实现代码

    微信小程序分包加载的实现代码

    分包加载是一种小程序优化技术,将小程序不同功能的代码,分别打包成不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载,在构建小程序分包项目时,构建会输出一个或多个分包,这篇文章主要介绍了微信小程序---分包加载,需要的朋友可以参考下
    2024-07-07
  • javascript对下拉列表框(select)的操作实例讲解

    javascript对下拉列表框(select)的操作实例讲解

    这篇文章主要介绍了javascript对下拉列表框(select)的操作。需要的朋友可以过来参考下,希望对大家有所帮助
    2013-11-11
  • 跨域请求两种方法 jsonp和cors的实现

    跨域请求两种方法 jsonp和cors的实现

    这篇文章主要介绍了跨域请求两种方法 jsonp和cors的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-11-11
  • javascript每日必学之循环

    javascript每日必学之循环

    javascript每日必学之循环,本文的主要内容就是循环,死循环时进行bug调式,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 如何解决日期函数new Date()浏览器兼容性问题

    如何解决日期函数new Date()浏览器兼容性问题

    这篇文章主要介绍了如何解决日期函数new Date()浏览器兼容性问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论