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 EasyUI 的EasyLoader功能介绍
Sep 12 Javascript
javascript处理表单示例(javascript提交表单)
Apr 28 Javascript
从零学jquery之如何使用回调函数
May 16 Javascript
javascript中cookie对象用法实例分析
Jan 30 Javascript
深入探究JavaScript中for循环的效率问题及相关优化
Mar 13 Javascript
Node.js中的require.resolve方法使用简介
Apr 23 Javascript
js调用设备摄像头的方法
Jul 19 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
Sep 07 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
Jun 19 Javascript
Vue表单控件数据绑定方法详解
Feb 05 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
Aug 14 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
在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中文字符串截断无乱码解决方法
2016/10/10 PHP
PHP实现的同步推荐操作API接口案例分析
2016/11/30 PHP
yii2.0框架场景的简单使用示例
2020/01/25 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
angular $watch 一个变量的变化(实例讲解)
2017/08/02 Javascript
Vue+webpack项目基础配置教程
2018/02/12 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
举例区分Python中的浅复制与深复制
2015/07/02 Python
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
详解python 注释、变量、类型
2018/08/10 Python
Python 获取主机ip与hostname的方法
2018/12/17 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
Tory Burch英国官方网站:美国时尚生活品牌
2017/12/06 全球购物
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
硕士研究生个人求职信
2013/12/04 职场文书
个人工作主要事迹
2014/05/08 职场文书
拉拉队口号
2014/06/16 职场文书
公司股东合作协议书
2014/09/14 职场文书
2014年班务工作总结
2014/12/02 职场文书
学校证明范文
2015/06/24 职场文书
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
MySQL中varchar和char类型的区别
2021/11/17 MySQL
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js
解决flex布局中子项目尺寸不受flex-shrink限制
2022/05/11 HTML / CSS