递归:是一个函数通过调用自身的情况下构成的;
首先上个例子:
Function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }
这是一个经典的递归阶乘函数,但是在js中这么调用可能会出现一些错误:例如如下代码
var anotherFactorial = factorial; factorial = null; alert(anotherFactorial)// 出错
以上代码先把factorial()函数保存在变量anotherFactorial中,然后将factorial变量设置为null,结果指向原始函数的引用只剩下一个。但再接下来调用anotherFactioral()时候,由于必须执行factorial函数,而factoial已经不再是函数,所以就会导致错误,再这种情况下,使用arguments.callee可以解决这个问题。
arguments.callee是一个指向正在执行的函数的指针,因此可以用来实现对函数的递归调用。
例如:
function factorial (num){ if(num){ return 1; }else{ return num*arguments.callee; } }
arguments.callee 优点:
1、可以确保无论怎样调用函数都不会出问题。因此编写递归函数时候,使用argments.callee总比使用函数名更保险;
注意点:严格模式下无效,会报错
严格模式下写法:
var factorial = (function f(){ if(num<1){ return 1; }else{ return num*f(num-1); } })
二、与定时器的结合使用:
js是单线程语言,但他允许通过设置超时调用和间歇时间来调度代码在特定的时刻执行。前者是在指定的时间过后执行代码,而后者则是每隔指定的时间就执行一次代码。
参数:要执行的代码 和 以 毫秒表示时间
//不建议传字符串,传递字符串可能导致性能损失 setTimeout("alter('hello word')", 1000); //推荐方式 setTimeout(function(){ alter("Hello world"); },1000) setInterval(function(){ alter("Hello world"); },1000)
注意点:结束
超时调用的代码都是在全局作用域执行的,因此函数中this的值在非严格模式下指向window对象,在严格模式下是undefined;
实际应用中:
使用超时调用来模拟间歇调用是一种最佳模式,在开发环境下,很少使用真正的间歇调用,原因是后一个间歇调用可能会在前一个间歇调用之间启动。
var num = 0, max = 0; function incrrmentNumber{ num++; if(num < max){ setTimeout(incrrmentNumber,500); }else{ alert("Done"); } } setTimeout(incrrmentNumber,500);
如果像上面那样使用超时调用,则可以避免这一点。所以不要使用间歇调用;
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
标签:
js,递归,定时器
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“js 递归和定时器的实例解析”评论...
更新动态
2024年11月13日
2024年11月13日
- 群星《唱给女人的歌》24K德国HD金碟[WAV+CUE]
- 孙燕姿.2011-是时候【美妙音乐】【WAV+CUE】
- 苏芮.2003-回首·时代全经典2CD【华纳】【WAV+CUE】
- 梁咏琪.1996-爱自己【EEI】【WAV+CUE】
- IGN经典逆天骚操作名著——《墙头草修炼手册》
- 突然爆火的“网红游戏”,真的有那么多人玩吗?
- 何老师客串《浪人崛起》了?盘点与明星撞脸的角色!
- 【原神】关于星鹫赤羽对珐芙琴班配队下珐露珊主C的适配度分析
- 【原神】V5.1攻略 | 迪西雅角色简评
- 【原神】大日御舆顶端怎么上去
- 胥拉齐《感谢有你》DTS-WAV
- 罗海英《金牌歌后》【WAV+CUE】
- 林叶《林叶·夜》【WAV/分轨】
- 群星《国语经典名曲01》音乐磁场系列[WAV+CUE][1G]
- 齐豫《滚石24K》24K金碟珍藏版系列[低速原抓WAV+分轨][1G]