JavaScript递归操作实例浅析
本文实例分析了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数组操作技巧总结》、《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript动画特效与技巧汇总》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
相关推荐
-
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
废话不多说了,直奔主题,你,具体代码如下所示: <script> //----------------for用来遍历数组对象-- var i,myArr = [1,2,3]; for (var i = 0; i < myArr.length; i++) { console.log(i+":"+myArr[i]); }; //---------for-in 用来遍历非数组对象 var man ={hands:2,legs:2,heads:1}; //为所有的对象添加cl
-
一个JavaScript递归实现反转数组字符串的实例
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>每天一个JavaScript实例-递归实现反转数组字符串</title> <script> var func = function(x,indx,str){ return
-
JavaScript Array Flatten 与递归使用介绍
如何用 JavaScript 将 [1,2,3,[4,5, [6,7]], [[[8]]]] 这样一个 Array 变成 [1,2,3,4,5, 6,7,8] 呢?传说中的 Array Flatten. 处理这种问题,通常我们会需要递归,来让程序自己按照一种算法去循环.在某书说写着,"递归是一种强大的编程技术",好吧,她不仅仅属于 JavaScript.递归可以很难,也可以比较简单(总得来说还是比较难).处理上面这个问题,用递归来解决,应该是比较适合的.之前工友这样实现了,算是一个简单
-
JS中递归函数
编程语言中,函数Func(Type a,--)直接或间接调用函数本身,则该函数称为递归函数.递归函数不能定义为内联函数. 递归函数: function factorical(num){ if(num<=1){ return 1; } else{ return num*factorical(num-1); } } factorial(2)//2 这个递归函数就是用函数来调用函数本身,但是这样真的好吗,好 接下来看这里 var another=factorical; factorical=null;
-
js使用递归解析xml
xml结构: 复制代码 代码如下: <RightMenuItems> <Item Code="New" Name="新建" GroupCode="Edit" GroupName="编辑"/> <Item Code="Open" Name="打开" GroupCode="Edit" GroupName="编辑"&
-
JS 树形递归实例代码
复制代码 代码如下: var l=json.length; var arr = []; for(var i = 0; i < l; i++){ (function(){ var jsonArray =arguments[0]; for(var k in jsonArray){ if(k.indexOf('children') != -1 && jsonArray[k] != null){ arguments.callee(jsonArray[k]); } else{ if(k ==
-
JavaScript支持的最大递归调用次数分析
你对JavaScript引擎能进行多少次递归调用好奇吗? 多少次递归调用 下面的函数可以让你找到答案: (灵感来自Ben Alman的 gist) 复制代码 代码如下: function computeMaxCallStackSize() { try { return 1 + computeMaxCallStackSize(); } catch (e) { // Call stack overflow return 1; }
-
JavaScript的递归之递归与循环示例介绍
递归与循环 对于不同类型的需要重复计算的问题,循环和递归两种方法各有所长,能给出更直观简单的方案.另一方面,循环和递归的方法可以互相转换.任何一个循环的代码都可以用递归改写,实现相同的功能:反之亦然.在不失去其普遍性的前提下,可以把循环和递归分别用下列伪代码概括. 伪代码格式说明:循环采用while形式:变量不加定义:赋值用:=:条件表达式和执行的语句都写成函数的形式,圆括号内写上相关的值.其他语法方面,尽量接近Javascript的规范. 复制代码 代码如下: //pseudo code of
-
JavaScript采用递归算法计算阶乘实例
本文实例讲述了JavaScript采用递归算法计算阶乘的方法.分享给大家供大家参考.具体如下: 这里使用JavaScript中的递归算法计算阶乘,初学编程时候,这是很常见的小例子,比较一下,JS中的计算方法与其有何异同. 运行效果如下: 具体代码如下: <html> <head> <meta http-equiv="content-type" content="text/html; charset=GB2312" /> <t
-
js获取html页面节点方法(递归方式)
很久没有操作过递归调用了.看完之后,蓦然惊醒啊! 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>&
-
js中递归函数的使用介绍
下面我们就做一个10以内的阶乘试试看吧: js中递归函数的使用 function f(num){ if(num alert("10!的结果为:"+f(10)); [Ctrl+A 全选 注:如需引入外部Js需刷新才能执行] 递归函数的调用就说这么多了 js递归函数调用自身时的保险方式. 来自js高级程序设计 一个典型阶乘递归函数: 复制代码 代码如下: function fact(num){ if (num<=1){ return 1; }else{ return num*fact
随机推荐
- js中document.write使用过程中的一点疑问解答
- 批处理实现网吧存档
- JAVA技术实现上传下载文件到FTP服务器(完整)
- javascript点击才出现验证码
- asp.net 按指定模板导出word,pdf实例代码
- PHP 长文章分页函数 带使用方法,不会分割段落,翻页在底部
- JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
- Hadoop中的Python框架的使用指南
- C语言实现将字符串转换为数字的方法
- Python中MySQL数据迁移到MongoDB脚本的方法
- Mysql更改默认引擎为Innodb的步骤方法
- 模拟javascript中的sort排序(简单实例)
- 推荐一个不错的图片浏览效果
- C语言编程中的联合体union入门学习教程
- python检测某个变量是否有定义的方法
- jQuery实现的仿百度,仿谷歌搜索下拉框效果示例
- JS与jQuery遍历Table所有单元格内容的方法
- Flex与.NET互操作 使用HttpService、URLReqeust和URLLoader加载/传输数据
- win2008 R2 WEB环境配置之Mssql Server 2008 R2 安装图文教程及远程连接设置方法
- Android Studio应用开发集成百度语音合成使用方法实例讲解