注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

梦幻雪冰

技在手,能在身,思在脑,从容过生活——陈能堡

 
 
 

日志

 
 

避免使用 setInterval 计时器  

2015-05-05 12:26:53|  分类: JavaScript |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
之前大家都知道setInterval可能会出现两个问题:某些间隔会被跳过;某些间隔会被提前执行。
在解决这个问题之前先来看看arguments对象的属性callee属性。
callee指向拥有这个arguments对象的函数(表示对函数本身的引用)。
  • function h5course() {
  •     console.log(arguments.callee);
  • }h5course();
  • // 类似arguments.callee等同于h5course(函数地址或者叫函数名)
  • function h5course() {
  •     console.log(h5course);
  • }h5course();
  • 利用callee属性实现经典阶乘 !4 = 4 * 3 * 2* 1;
  • function h5course(n) {
  •     if (n <= 0) {
  •         return 1;
  •     } else {
  •         return arguments.callee(n - 1) * n;
  •     }
  • }
  • 步骤详解
    • function h5course(4) {
    •     if (4 <= 0) {
    •         return 1;
    •     } else {
    •         return arguments.callee(3) * 4;
    •     }
    • }
    • // arguments.callee(3) 等同于 h5course(3)
    • function h5course(3) {
    •     if (3 <= 0) {
    •         return 1;
    •     } else {
    •         return arguments.callee(2) * 3;
    •     }
    • }
    • // arguments.callee(2) 等同于 h5course(2)
    • function h5course(2) {
    •     if (2 <= 0) {
    •         return 1;
    •     } else {
    •         return arguments.callee(1) * 2;
    •     }
    • }
    • // arguments.callee(1) 等同于 h5course(1)
    • function h5course(1) {
    •     if (1 <= 0) {
    •         return 1;
    •     } else {
    •         return arguments.callee(0) * 1;
    •     }
    • }
    • // arguments.callee(0) 等同于 h5course(0)
    • function h5course(0) {
    •     if (0 <= 0) {
    •         return 1;
    •     } else {
    •         return arguments.callee(-1) * 0;
    •     }
    • }
    • // 0的时候等于1
    解决setInterval的问题是用setTimeout的链式书写
    1. function h5course() {
    2.     // 函数功能代码
    3.     console.log("梦幻雪冰");
    4.     // 添加计时器
    5.     setTimeout(arguments.callee, 16);
    6. }h5course();
    解析:这样写的好处是,当功能函数的代码没有执行完,不会继续添加计时器,防止了重复添加计时器与保证计时器的及时运行(不会被跳过或提前执行)。


    欢迎学习交流——梦幻雪冰独行冰海@font-face中iefix的详解 - 梦幻雪冰 - 梦幻雪冰
    梦幻雪冰微博——梦幻雪冰
    HTML5学堂贴吧——HTML5学堂
    HTML5学堂微博——HTML5学堂
    HTML5学堂官网——HTML5学堂
    HTML5学堂微信
    setInterval和setTimeout参数剖析 - 梦幻雪冰 - 梦幻雪冰
      评论这张
     
    阅读(79)| 评论(0)
    推荐 转载

    历史上的今天

    在LOFTER的更多文章

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2017