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实现动态操作select选中
Feb 11 Javascript
举例讲解Node.js中的Writable对象
Jul 29 Javascript
js格式化输入框内金额、银行卡号
Feb 01 Javascript
JS实现超简单的汉字转拼音功能示例
Dec 22 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
Feb 21 Javascript
React学习笔记之事件处理(二)
Jul 02 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
Mar 13 Javascript
vue技术分享之你可能不知道的7个秘密
Apr 09 Javascript
VUE中使用MUI方法
Feb 12 Javascript
Vue项目环境搭建详细总结
Sep 26 Javascript
JS document form表单元素操作完整示例
Jan 13 Javascript
详解JavaScript 高阶函数
Sep 14 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乱码问题
2012/03/25 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php采用curl模仿登录人人网发布动态的方法
2014/11/07 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
2016/03/29 PHP
php处理单文件、多文件上传代码分享
2016/08/24 PHP
详解yii2实现分库分表的方案与思路
2017/02/03 PHP
JavaScript 语言的递归编程
2010/05/18 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
前端实现文件的断点续传(前端文件提交+后端PHP文件接收)
2016/11/04 Javascript
jQuery学习笔记——jqGrid的使用记录(实现分页、搜索功能)
2016/11/09 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
jQuery事件与动画基础详解
2017/02/23 Javascript
JS实现复制功能
2017/03/01 Javascript
js 倒计时(高效率服务器时间同步)
2017/09/12 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
微信小程序scroll-view横向滑动嵌套for循环的示例代码
2018/09/20 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
vue自定义键盘信息、监听数据变化的方法示例【基于vm.$watch】
2019/03/16 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
简单上手Python中装饰器的使用
2015/07/12 Python
python构建自定义回调函数详解
2017/06/20 Python
python列表推导式操作解析
2019/11/26 Python
python多进程重复加载的解决方式
2019/12/13 Python
Python3自带工具2to3.py 转换 Python2.x 代码到Python3的操作
2021/03/03 Python
英国领先的办公用品供应商:Viking
2016/08/01 全球购物
餐饮总经理岗位职责
2014/03/07 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
公民授权委托书
2014/10/15 职场文书
高校教师个人工作总结2014
2014/12/17 职场文书
小学端午节活动总结
2015/02/11 职场文书
公司车队管理制度
2015/08/04 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
Django如何与Ajax交互
2021/04/29 Python
HTML中的表单元素介绍
2022/02/28 HTML / CSS
Mysql中@和@@符号的详细使用指南
2022/06/05 MySQL