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中的Document文档对象
Jan 16 Javascript
javascript 解析后的xml对象的读取方法细解
Jul 25 Javascript
jquery实现图片翻页效果
Dec 23 Javascript
微信小程序 input输入框详解及简单实例
Jan 10 Javascript
Javascript封装id、class与元素选择器方法示例
Mar 13 Javascript
无循环 JavaScript(map、reduce、filter和find)
Apr 08 Javascript
基于Bootstrap分页的实例讲解(必看篇)
Jul 04 Javascript
JS实现求5的阶乘示例
Jan 21 Javascript
使用post方法实现json往返传输数据的方法
Mar 30 Javascript
微信小程序自定义顶部组件customHeader的示例代码
Jun 03 Javascript
javascript canvas实现简易时钟例子
Sep 05 Javascript
详解JVM系列之内存模型
Jun 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
默默简单的写了一个模板引擎
2007/01/02 PHP
php urlencode()与urldecode()函数字符编码原理详解
2011/12/06 PHP
浅析php插件 Simple HTML DOM 用DOM方式处理HTML
2013/07/01 PHP
在Linux系统的服务器上隐藏PHP版本号的方法
2015/06/06 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
2015/11/09 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
2016/09/23 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
php实现登录页面的简单实例
2019/09/29 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
javascript hashtable实现代码
2009/10/13 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
滚动条响应鼠标滑轮事件实现上下滚动的js代码
2014/06/30 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
gulp-htmlmin压缩html的gulp插件实例代码
2016/06/06 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
Easy UI动态树点击文字实现展开关闭功能
2017/09/30 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
详解JavaScript的内存空间、赋值和深浅拷贝
2019/04/17 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
如何实现vue的tree组件
2020/12/03 Vue.js
浅谈python和C语言混编的几种方式(推荐)
2017/09/27 Python
django中的setting最佳配置小结
2017/11/21 Python
详谈python中冒号与逗号的区别
2018/04/18 Python
Python 处理图片像素点的实例
2019/01/08 Python
Python除法之传统除法、Floor除法及真除法实例详解
2019/05/23 Python
python的pygal模块绘制反正切函数图像方法
2019/07/16 Python
flask框架单元测试原理与用法实例分析
2019/07/23 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
2020/04/10 Python
澳大利亚冒险体验:Adrenaline(跳伞、V8赛车、热气球等)
2017/09/18 全球购物
2014新课程改革心得体会
2014/03/10 职场文书
挂牌仪式主持词
2014/03/20 职场文书
工作证明范本(2篇)
2014/09/14 职场文书
小学教学工作总结2015
2015/05/13 职场文书
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS