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 相关文章推荐
ExtJS GridPanel 根据条件改变字体颜色
Mar 08 Javascript
基于JQuery制作可编辑的表格特效
Dec 23 Javascript
js实现简单选项卡与自动切换效果的方法
Apr 10 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
JS实现CheckBox复选框全选、不选或全不选功能
Jul 28 Javascript
JavaScript的Backbone.js框架入门学习指引
May 07 Javascript
关于List.ToArray()方法的效率测试
Sep 30 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
Mar 08 Javascript
AngularJS中$http的交互问题
Mar 29 Javascript
Angularjs实现数组随机排序的方法
Oct 02 Javascript
基于Vue组件化的日期联动选择器功能的实现代码
Nov 30 Javascript
vue 实现单选框设置默认选中值
Nov 07 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 Ajax中文乱码问题解决方法
2009/02/27 PHP
php中一个完整表单处理实现代码
2011/11/10 PHP
PHP英文字母大小写转换函数小结
2014/05/03 PHP
PHP读取XML格式文件的方法总结
2017/02/27 PHP
Yii2 加载css、js 载静态资源的方法
2017/03/10 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
js字符串转换成数字与数字转换成字符串的实现方法
2014/01/08 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
jQuery表单元素选择器代码实例
2017/02/06 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
2018/04/23 Javascript
JS模拟实现哈希表及应用详解
2018/05/04 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
关于Vue组件库开发详析
2018/07/01 Javascript
Vue实现左右菜单联动实现代码
2018/08/12 Javascript
javascript实现对话框功能警告(alert 消息对话框)确认(confirm 消息对话框)
2019/05/07 Javascript
Vue+webpack实现懒加载过程解析
2020/02/17 Javascript
Python中pygame安装方法图文详解
2015/11/11 Python
Python中矩阵创建和矩阵运算方法
2018/08/04 Python
python xpath获取页面注释的方法
2019/01/14 Python
在numpy矩阵中令小于0的元素改为0的实例
2019/01/26 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
HTML5页面中尝试调起APP功能
2017/09/12 HTML / CSS
Expedia意大利旅游网站:酒店、机票和租车预订
2017/10/30 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
数据员岗位职责
2013/11/19 职场文书
毕业生的自我评价分享
2013/12/18 职场文书
高一数学教学反思
2014/02/07 职场文书
文明城市标语
2014/06/16 职场文书
总经理检讨书
2014/09/15 职场文书
“向国旗敬礼”活动策划方案(4篇)
2014/09/27 职场文书
公安机关纪律作风整顿剖析
2014/10/10 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang
使用Pytorch训练two-head网络的操作
2021/05/28 Python