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 相关文章推荐
使用JQuery进行跨域请求
Jan 25 Javascript
jquery怎样实现ajax联动框(二)
Mar 08 Javascript
jquery ztree异步搜索(搜叶子)实践
Feb 25 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
Apr 13 Javascript
微信开发 消息推送实现代码
Oct 21 Javascript
Angular2 PrimeNG分页模块学习
Jan 14 Javascript
jQuery中 bind的用法简单介绍
Feb 13 Javascript
js实现楼层导航功能
Feb 23 Javascript
vue 中directive功能的简单实现
Jan 05 Javascript
基于vue cli重构多页面脚手架过程详解
Jan 23 Javascript
基于Three.js实现360度全景图片
Dec 30 Javascript
VUE项目初建和常见问题总结
Sep 12 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支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
解析php如何将日志写进syslog
2013/06/28 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
js word表格动态添加代码
2010/06/07 Javascript
P3P Header解决Cookie跨域的问题
2013/03/12 Javascript
用示例说明filter()与find()的用法以及children()与find()的区别分析
2013/04/26 Javascript
JS 数字转换研究总结
2013/12/26 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
谷歌地图打不开的解决办法
2014/08/07 Javascript
项目中常用的JS方法整理
2015/01/30 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
2016/05/11 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
springMvc 前端用json的方式向后台传递对象数组方法
2018/08/07 Javascript
el-select 下拉框多选实现全选的实现
2019/08/02 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
python中常用检测字符串相关函数汇总
2015/04/15 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
python遍历文件夹,指定遍历深度与忽略目录的方法
2018/07/11 Python
使用NumPy读取MNIST数据的实现代码示例
2019/11/20 Python
python安装和pycharm环境搭建设置方法
2020/05/27 Python
python+excel接口自动化获取token并作为请求参数进行传参操作
2020/11/10 Python
详解css3自定义滚动条样式写法
2017/12/25 HTML / CSS
Keds官方网站:购买帆布运动鞋和经典皮鞋
2016/11/12 全球购物
惠而浦美国官网:Whirlpool.com
2021/01/19 全球购物
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
岗位说明书范文
2014/05/07 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书
莫言诺贝尔获奖感言(全文)
2015/07/31 职场文书
深入理解python协程
2021/06/15 Python
Win11 21h2可以升级22h2吗?看看你的电脑符不符合要求
2022/07/07 数码科技
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS