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 相关文章推荐
setInterval与clearInterval的使用示例代码
Jan 28 Javascript
jQuery ajax调用WCF服务实例
Jul 16 Javascript
随鼠标移动的时钟非常漂亮遗憾的是只支持IE
Aug 12 Javascript
深入理解JavaScript系列(17):面向对象编程之概论详细介绍
Mar 04 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
JQuery中解决重复动画的方法
Oct 17 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
Node.js 实现简单小说爬虫实例
Nov 18 Javascript
js实现图片360度旋转
Jan 22 Javascript
jQuery使用unlock.js插件实现滑动解锁
Apr 04 jQuery
Vue的生命周期操作示例
Sep 17 Javascript
基于vue+element实现全局loading过程详解
Jul 10 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源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
批量获取memcache值并按key的顺序返回的实现代码
2011/06/14 PHP
第二章 PHP入门基础之php代码写法
2011/12/30 PHP
关于PHP二进制流 逐bit的低位在前算法(详解)
2013/06/13 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
php使用sql server验证连接数据库的方法
2014/12/25 PHP
基于PHP微信红包的算法探讨
2016/07/21 PHP
php array_multisort 对数组进行排序详解及实例代码
2016/10/27 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
2017/11/10 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
不用ajax实现点击文字即可编辑的方法
2007/12/16 Javascript
jQuery的缓存机制浅析
2014/06/07 Javascript
jQuery中nextUntil()方法用法实例
2015/01/07 Javascript
js代码实现点击按钮出现60秒倒计时
2021/01/28 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
Angular2 组件交互实例详解
2017/08/24 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
vue实现编辑器键盘抬起时内容跟随光标距顶位置向上滚动效果
2020/05/28 Javascript
python实现Floyd算法
2018/01/03 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
意大利在线购买隐形眼镜网站:VisionDirect.it
2019/03/18 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
金融专业应届生求职信
2013/11/02 职场文书
学生拾金不昧表扬信
2014/01/21 职场文书
酒店营销策划方案
2014/02/07 职场文书
班主任评语大全
2014/04/26 职场文书
工作总结与自我评价
2014/09/18 职场文书
土建技术员岗位职责
2015/04/11 职场文书
摩登时代观后感
2015/06/03 职场文书
详解mysql三值逻辑与NULL
2021/05/19 MySQL
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js
vue实力踩坑之push当前页无效
2022/04/10 Vue.js