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 相关文章推荐
关于跨站脚本攻击问题
Dec 22 Javascript
浅谈javascript六种数据类型以及特殊注意点
Dec 20 Javascript
Document.location.href和.replace的区别示例介绍
Mar 04 Javascript
jQuery实现按键盘方向键翻页特效
Mar 18 Javascript
JavaScript实现通过select标签跳转网页的方法
Sep 29 Javascript
Bootstrap如何创建表单
Oct 21 Javascript
JS实现常见的查找、排序、去重算法示例
May 21 Javascript
微信小程序实现美团菜单
Jun 06 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
Nov 30 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
Jun 04 Javascript
8 个有用的JS技巧(推荐)
Jul 03 Javascript
JS中比Switch...Case更优雅的多条件判断写法
Sep 05 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大文件切割上传功能实例分析
2019/07/01 PHP
Mozilla中显示textarea中选择的文字
2006/09/07 Javascript
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
Ext 表单布局实例代码
2009/04/30 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
javascript变量声明实例分析
2015/04/25 Javascript
JavaScript时间操作之年月日星期级联操作
2016/01/15 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
jQuery实现菜单的显示和隐藏功能示例
2018/07/24 jQuery
React中如何引入Angular组件详解
2018/08/09 Javascript
webpack 开发和生产并行设置的方法
2018/11/08 Javascript
详解vue中localStorage的使用方法
2018/11/22 Javascript
[03:19]2016国际邀请赛中国区预选赛第四日TOP10镜头集锦
2016/07/01 DOTA
在Python的web框架中中编写日志列表的教程
2015/04/30 Python
python读取oracle函数返回值
2016/07/18 Python
浅谈pycharm的xmx和xms设置方法
2018/12/03 Python
画pytorch模型图,以及参数计算的方法
2019/08/17 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
浅析HTML5:'data-'属性的作用
2018/01/23 HTML / CSS
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
Petmate品牌官方网站:宠物用品
2018/11/25 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
大学毕业生的自我鉴定
2013/11/30 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
检查接待方案
2014/02/27 职场文书
公司口号大全
2014/06/11 职场文书
护士医德医风自我评价
2014/09/15 职场文书
2014年四风个人对照检查及整改措施
2014/10/28 职场文书
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
离婚协议书样本
2015/01/26 职场文书
小区环境卫生倡议书
2015/04/29 职场文书
2015年圣诞节寄语
2015/08/17 职场文书
导游词之凤凰古城
2019/10/22 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js