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 相关文章推荐
用ADODB.Stream转换
Jan 22 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
Jun 28 Javascript
Jquery插件easyUi表单验证提交(示例代码)
Dec 30 Javascript
jQuery 2.0.3 源码分析之core(一)整体架构
May 27 Javascript
浅析JavaScript Array和string的转换(推荐)
May 20 Javascript
深入浅析search 搜索框的写法
Aug 02 Javascript
VUE axios上传图片到七牛的实例代码
Jul 28 Javascript
webstorm和.vue中es6语法报错的解决方法
May 08 Javascript
vue 自定义提示框(Toast)组件的实现代码
Aug 17 Javascript
深入学习JavaScript中的bom
May 27 Javascript
深入解析koa之异步回调处理
Jun 17 Javascript
实例分析javascript中的异步
Jun 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
破解.net程序(dll文件)编译和反编译方法
2013/01/31 PHP
ThinkPHP 3.2.2实现事务操作的方法
2017/05/05 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式一图文详解
2019/04/09 PHP
可以用来调试JavaScript错误的解决方案
2010/08/07 Javascript
JQuery小知识
2010/10/15 Javascript
让你的CSS像Jquery一样做筛选的实现方法
2011/07/10 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
javascript匿名函数实例分析
2014/11/18 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
angular route中使用resolve在uglify压缩后问题解决
2016/09/21 Javascript
给easyui的datebox控件添加清空按钮的实现方法
2016/11/09 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
使用 Node.js 对文本内容分词和关键词抽取
2017/05/27 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
vue element动态渲染、移除表单并添加验证的实现
2019/01/16 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
详解Python中的动态属性和特性
2018/04/07 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
django 信号调度机制详解
2019/07/19 Python
Django封装交互接口代码
2020/07/12 Python
python包的导入方式总结
2021/03/02 Python
前端面试必备之html5的新特性
2017/09/05 HTML / CSS
Tretorn美国官网:瑞典外套和鞋类品牌,抵御风雨
2018/07/19 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
摄影实习自我鉴定
2013/09/20 职场文书
八项规定整改措施
2014/02/12 职场文书
一体化教学实施方案
2014/05/10 职场文书
文明市民先进事迹
2014/05/15 职场文书
文明班集体申报材料
2014/05/23 职场文书
2015年司法局工作总结
2015/05/22 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android
Go gRPC进阶教程gRPC转换HTTP
2022/06/16 Golang