递归:是一个函数通过调用自身的情况下构成的;

首先上个例子:
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
# 递归
# 定时器
# js定时器实现倒计时效果
# JavaScript定时器详解及实例
# JavaScript暂停和继续定时器的实现方法
# JavaScript 定时器 SetTimeout之定时刷新窗口和关闭窗口(代码超简单)
# JavaScript定时器setTimeout()和setInterval()详解
# Javascript 定时器调用传递参数的方法
# js 定时器setTimeout无法调用局部变量的解决办法
# js定时器+简单的动画效果实例
# JS动画定时器知识总结
# JavaScript定时器设置、使用与倒计时案例详解
# 是一个
# 是在
# 模式下
# 情况下
# 就会
# 是一种
# 则是
# 可以用
# 但他
# 这是一个
# 只剩下
# 报错
# 先把
# 则可
# 上个
# 设置为
# 在前
# 来实现
# 每隔
相关文章:
如何在阿里云域名上完成建站全流程?
如何确保FTP站点访问权限与数据传输安全?
北京网站制作网页,网站升级改版需要多久?
如何用好域名打造高点击率的自主建站?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
Python路径拼接规范_跨平台处理说明【指导】
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
建站之家VIP精选网站模板与SEO优化教程整合指南
潮流网站制作头像软件下载,适合母子的网名有哪些?
建站之星后台密码遗忘?如何快速找回?
如何快速生成ASP一键建站模板并优化安全性?
行程制作网站有哪些,第三方机票电子行程单怎么开?
无锡营销型网站制作公司,无锡网选车牌流程?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
建站之星多图banner生成与模板自定义指南
如何高效生成建站之星成品网站源码?
高配服务器限时抢购:企业级配置与回收服务一站式优惠方案
如何通过服务器快速搭建网站?完整步骤解析
如何快速搭建虚拟主机网站?新手必看指南
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
义乌企业网站制作公司,请问义乌比较好的批发小商品的网站是什么?
电商平台网站制作流程,电商网站如何制作?
Python多线程使用规范_线程安全解析【教程】
建站之星收费标准详解:套餐费用及年费价格表一览
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
如何通过WDCP绑定主域名及创建子域名站点?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
英语简历制作免费网站推荐,如何将简历翻译成英文?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在云主机快速搭建网站站点?
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何在腾讯云免费申请建站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
如何高效利用亚马逊云主机搭建企业网站?
建站之星如何助力网站排名飙升?揭秘高效技巧
昆明高端网站制作公司,昆明公租房申请网上登录入口?
如何快速生成专业多端适配建站电话?
宝塔面板如何快速创建新站点?
如何使用Golang安装API文档生成工具_快速生成接口文档
如何解决VPS建站LNMP环境配置常见问题?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
如何快速搭建支持数据库操作的智能建站平台?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
Thinkphp 中 distinct 的用法解析
装修招标网站设计制作流程,装修招标流程?
c# 服务器GC和工作站GC的区别和设置
大型企业网站制作流程,做网站需要注册公司吗?
*请认真填写需求信息,我们会在24小时内与您取得联系。