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 类定义的4种方法
Sep 12 Javascript
extjs 的权限问题 要求控制的对象是 菜单,按钮,URL
Mar 09 Javascript
zeroclipboard复制到剪切板的flash
Aug 04 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
Mar 10 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
May 07 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
老生常谈Javascript中的原型和this指针
Oct 09 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
js中自定义react数据验证组件实例详解
Oct 19 Javascript
使用js在layui中实现上传图片压缩
Jun 18 Javascript
vue css 引入asstes中的图片无法显示的四种解决方法
Mar 16 Javascript
关于React Native使用axios进行网络请求的方法
Aug 02 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使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php生成随机密码自定义函数代码(简单快速)
2014/05/10 PHP
ThinkPHP文件上传实例教程
2014/08/22 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
JS随即打乱数组实现代码
2012/12/03 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
详解JavaScript ES6中的Generator
2015/07/28 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
2015/09/02 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
Jquery获取radio选中的值
2017/05/05 jQuery
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
Vue组件之自定义事件的功能图解
2018/02/01 Javascript
JavaScript引用类型Date常见用法实例分析
2018/08/08 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
[02:17]2016完美“圣”典风云人物:Sccc专访
2016/12/03 DOTA
python文件比较示例分享
2014/01/10 Python
python中元类用法实例
2014/10/10 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Python3.6实现带有简单界面的有道翻译小程序
2019/04/16 Python
NumPy 数组使用大全
2019/04/25 Python
详解Python 爬取13个旅游城市,告诉你五一大家最爱去哪玩?
2019/05/07 Python
pytorch 更改预训练模型网络结构的方法
2019/08/19 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
亚马逊新加坡官方网站:Amazon.sg
2020/03/25 全球购物
万代美国官网:PREMIUM BANDAI USA
2020/09/11 全球购物
DELPHI中如何调用API,可举例说明
2014/01/16 面试题
报关专员求职信范文
2014/02/22 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
铁人观后感
2015/06/16 职场文书
2016年员工政治思想表现评语
2015/12/02 职场文书