JavaScript递归操作实例浅析


Posted in Javascript onOctober 31, 2016

本文实例分析了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延迟加载
Mar 09 Javascript
向fckeditor编辑器插入指定代码的方法
May 25 Javascript
javascript this用法小结
Dec 19 Javascript
javascript 去字符串空格终极版(支持utf8)
Nov 14 Javascript
基于JavaScript 声明全局变量的三种方式详解
May 07 Javascript
js生成随机数之random函数随机示例
Dec 20 Javascript
jquery增加和删除元素的方法
Jan 14 Javascript
jQuery制作效果超棒的手风琴折叠菜单
Apr 03 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
微信小程序之发送短信倒计时功能
Aug 30 Javascript
微信小程序自定义联系人弹窗
May 26 Javascript
如何编写一个 Webpack Loader的实现
Oct 18 Javascript
在html中引入外部js文件,并调用带参函数的方法
Oct 31 #Javascript
Validform表单验证总结篇
Oct 31 #Javascript
Javascript数组中push方法用法分析
Oct 31 #Javascript
JavaScript中的await/async的作用和用法
Oct 31 #Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 #Javascript
微信小程序 开发工具快捷键整理
Oct 31 #Javascript
微信小程序 实现tabs选项卡效果实例代码
Oct 31 #Javascript
You might like
如何在PHP中使用正则表达式进行查找替换
2013/06/13 PHP
php实现仿写CodeIgniter的购物车类
2015/07/29 PHP
php session的锁和并发
2016/01/22 PHP
PHP基于rabbitmq操作类的生产者和消费者功能示例
2018/06/16 PHP
测试你的JS的掌握程度的代码
2009/12/09 Javascript
JQuery 操作/获取table具体代码
2013/06/13 Javascript
jQuery中:visible选择器用法实例
2014/12/30 Javascript
JS实现支持多选的遍历下拉列表代码
2015/08/20 Javascript
分享有关jQuery中animate、slide、fade等动画的连续触发、滞后反复执行的bug
2016/01/10 Javascript
html+js实现简单的计算器代码(加减乘除)
2016/07/12 Javascript
js控制文本框只能输入中文、英文、数字与指定特殊符号的实现代码
2016/09/09 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
你有必要知道的10个JavaScript难点
2017/07/25 Javascript
JavaScript实现元素滚动条到达一定位置循环追加内容
2017/12/28 Javascript
element-ui表格列金额显示两位小数的方法
2018/08/24 Javascript
js 递归json树实现根据子id查父id的方法分析
2019/11/08 Javascript
如何将Node.js中的回调转换为Promise
2020/11/10 Javascript
Python 多进程和数据传递的理解
2017/10/09 Python
Python操作MySQL数据库的方法
2018/06/20 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
2019/04/02 Python
Python调用graphviz绘制结构化图形网络示例
2019/11/22 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
Python键鼠操作自动化库PyAutoGUI简介(小结)
2020/05/17 Python
运行Python编写的程序方法实例
2020/10/21 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
经典C++面试题一
2016/11/06 面试题
中职生自荐信
2013/10/13 职场文书
小学教师岗位职责
2013/11/25 职场文书
迎国庆横幅标语
2014/10/08 职场文书
小学生毕业评语
2014/12/26 职场文书
调解协议书范本
2016/03/21 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
详解Apache SkyWalking 告警配置指南
2021/04/22 Servers
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers