JavaScript递归和定时器实例解析
递归:是一个函数通过调用自身的情况下构成的;
首先上个例子:
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);
如果像上面那样使用超时调用,则可以避免这一点。所以不要使用间歇调用;
原文链接:http://www.qdfuns.com/notes/39151/f1297eed2bbac5a4172b680b6a1a6529.html
(资源库 www.zyku.net)
上一篇:canvas的神奇用法
栏 目:JavaScript
下一篇:js实现文本上下来回滚动
本文标题:JavaScript递归和定时器实例解析
本文地址:https://www.zyku.net/js/483.html
您可能感兴趣的文章
- 09-07javaScript实现世界各地时间显示
- 05-19javascript实现获取中文汉字拼音首字母
- 05-10javascript实现单张或多张图片持续无缝滚动
- 08-10javascript实现汉字转拼音代码实例
- 07-07使用JavaScript实现alert的实例代码
- 07-04JavaScript中三个等号和两个等号你了解多少
- 05-31Javascript创建类和对象详解
- 04-25JavaScript中 DOM操作方法小结
- 04-04JavaScript实现实时更新系统时间的实例代码
- 04-03基于JQuery和原生JavaScript实现网页定位导航特效
- 09-20小雅智能音箱连蓝牙步骤一览
- 12-18HTML <select> 标签
- 11-12微信青少年模式监护人怎么解除
- 03-17thinkPHP5.0框架API优化后的友好性分
- 02-09oppo手机设置锁屏显示农历日期教程
- 02-19解决ecshop提示不支持jpeg类型图片的
- 02-22Nginx 禁止IP访问的方法
- 02-18真我V13电量百分比设置教程
- 10-21华为耳机怎么重新匹配手机
- 10-19airpods左右耳音量如何调节一致
最近更新
阅读排行
猜你喜欢
- 01-12小6相机-小6相机应用软件功能介绍
- 09-17vivox70pro设置双击屏幕亮起教程分享
- 02-29帝国CMS 7.2版多终端访问功能使用图文
- 07-07linux过滤空格、linux过滤注释行(^#)
- 02-20Notepad++插件JSTool:JS代码格式化工具
- 01-12奇趣抖音-奇趣抖音应用软件功能介绍
- 08-14织梦DedeCMS调用发布时间为某个时间前
- 07-05Linux dip命令
- 02-11vivoy30调整桌面图标大小教程
- 11-10华为手环如何绑定iphone手机