首页 > 试题广场 >

计时器

[编程题]计时器
  • 热度指数:129234 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
推荐
setInterval() 方***按照指定周期不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。注意第一个数需要立即输出即可。
function count(start, end) {
  //立即输出第一个值
  console.log(start++);
     var timer = setInterval(function(){
         if(start <= end){
             console.log(start++);
         }else{
             clearInterval(timer);
         }
     },100);
    //返回一个对象
     return {
         cancel : function(){
             clearInterval(timer);
         }
     };
 } 

编辑于 2015-08-18 21:01:11 回复(38)
        function count(start, end) {
            console.log(start);
            let timer = setTimeout(function fn() {
                start++
                console.log(start)
                if (start !== end) { timer = setTimeout(fn, 100) }
            }, 100)


            return obj = {
                cancel() {
                    clearTimeout(timer)
                }

            }

        }
发表于 2023-05-11 21:18:06 回复(0)
function count(start, end) {
    console.log(start)
    var timer = setInterval(()=>{
        if(start < end){
            start++
            console.log(start)
        }
    },100)
    return {
        cancel(){
            clearInterval(timer)
        }
    }
}

发表于 2022-11-12 09:25:35 回复(0)
感觉有点坑,看了一下第二个案例,花了我将近一上午迷迷糊糊才知道,案例重新定义了setTimeout与setInterval达到可以操控我们设置的函数顺序,并不是理论上的100ms就输出一个数,而是通过不断的递归调用去实现(clearTimeout和clearInterval也被重新定义了),一开始我并没有加上初始需要打印初始值,搞得我有点迷糊还以为那里写错了,唉
function count(start, end) {
    let num = start;
    let obj = {};
    console.log(num) // 就是这段
    obj.timer = setInterval(() => {
      if (num < end) console.log(num+=1);
      else obj.cancel();
    }, 100);
    obj.cancel = function () {
      clearInterval(obj.timer);
    };
    return obj;
}

发表于 2022-07-07 10:53:50 回复(1)

前面那些用setTimeout的大兄弟都不能通过use strict严格模式。玩玩没问题,用于实际生产要出大问题。
当然使用setInterval没基本毛病:

'use strict'
function count(start, end) {
  console.log(start++);
  let timer = setInterval(() => {
    if (start > end) {
      clearInterval(timer);
    } else {
      console.log(start++);
    }
  }, 100);
  return {
    cancel: () => {
      clearInterval(timer);
    }
  };
}

说回来用setTimeout在控制台跑没毛病,到了牛客这儿就不行了。

'use strict'
function count(start, end) {
  if (start <= end) {
    console.log(start++)
  };
  let timer = setTimeout(() => count(start, end), 100);// 这句放进if后面的代码块就能行得通
  return {
    cancel: ()=> {
      clearTimeout(timer)
    }
  };
}

var obj = new count(1, 5);
obj.cancel; 
/*()=> {
      clearTimeout(timer)
    }
*/
发表于 2022-05-25 10:32:09 回复(1)
 这个题还是比较简单的
  function count(start, end) {
            console.log(start)
            var time = setInterval(function () {
                if (start < end) {
                    start += 1
                    console.log(start)
                }
            }, 100)
            return {
                cancel() {
                    clearInterval(time)
                }
            }
        }
发表于 2022-04-20 18:35:46 回复(0)
方法一:
function count(start, end) {
    console.log(start++);
    let timer = setInterval(function() {
        if(start <= end) {
            console.log(start++);
        }else{
            clearInterval(timer);
        }
    },100);
    return {
        cancel:function() {
            clearInterval(timer);
        }
    }
}
方法二:
function count(start, end) {
    if(start <= end) {
        console.log(start++);
        item = setTimeout(function(){
            count(start,end)
        },100);
    }
    return {
        cancel: function(){clearTimeout(item);}
    }
}



发表于 2022-03-26 18:29:01 回复(0)
function count(start, end) {
    console.log(start);
    var obj = {};
    var timer = setInterval(()=>{
        if(start<end){
            start++
            console.log(start);
        }else{
            obj.cancel();
        }
    },100);
    obj.cancel = function(){
        clearInterval(timer);
    }
    return obj;
}

发表于 2022-02-15 15:40:11 回复(0)
            function count(start, end) {
                 console.log(start)
                 let timer
                 function coun(){
                     if(start === end) {
                        clearTimeout(timer)
                     }else{
                         console.log(++start)
                         timer = setTimeout(coun,100)
                     }
                 }
                 coun()
                 return { cancel() {clearTimeout(timer)}}
            }
            count(1,9)

这个在自己软件上都可以,在这个网站上就是不行,为啥a
发表于 2021-11-20 15:25:52 回复(1)
function count(start, end) {
    console.log(start);
    let timer = setInterval(()=>{
        console.log(++start);
        if (start == end) {
            cancel()
        }
    },100)
    function cancel(){
        clearInterval(timer)
    }
    return {
        cancel
    }
}
// 我题目都看不懂啊, 90后老了

发表于 2021-10-27 17:19:45 回复(1)
function count(start, end) {
    console.log(start++);
    var timer = setInterval(() => {
        if(start <= end){
            console.log(start++)
        }else {
            clearInterval(timer)
        }
    },100)
    return {
        cancel:function(){
            clearInterval(timer)
        }
    }
}

发表于 2021-10-11 20:10:33 回复(0)
function count(start, end) {
    console.log(start)
    const cancel = _=> clearInterval(timer)
    const clog = count => {
        console.log(count)
        if(count===end) cancel()
    }
    let timer = setInterval(()=>{
        clog(++start)
    },100)
    return {cancel}
}
发表于 2021-09-28 15:29:06 回复(0)
function count(start, end) {
    let current = start
    
    let timer = setInterval(() => {
        if(current <= end) {
            console.log(current++)
        }
    }, 100)
    
    console.log(current++)
    
    return {
        cancel: function() {
            clearInterval(timer)
            timer = null
        }
    }
}

发表于 2021-09-02 12:28:40 回复(0)
//为啥这样写不行

function count(start, end) {
    console.log(start);
    var id;
    while(start<end){
        id=setInterval(console.log(++start),100);
    }
    return cancel(id);
}
function cancel(ids){
    clearInterval(ids);
}



发表于 2021-08-29 03:11:29 回复(0)
function count(start, end) {
    var num = start
    console.log(num)
    
    var timer = setInterval(() => {
        console.log(++num)
        if(num >= end) {
            cancel()
        }
    }, 100)
    
    function cancel() {
        clearTimeout(timer)
    }
    
    return { cancel }
}

发表于 2021-08-28 23:24:23 回复(0)
function count(start, end) {
  let num = start;
    console.log(num);
    let timer =setInterval(function(){
        if(num<end){
            num++;
              console.log(num);
        }
      
    },100)
        let obj = {};

    obj.cancel =function (timer){
        clearInterval(timer);
    }
        
    return obj
        
}
我这哪错了??
发表于 2021-08-09 14:22:30 回复(0)
function count(start, end) {
    console.log(start)
    var timer = null
    timer = setInterval(() => {
        if(start < end) {
            start++
            console.log(start)
        } else {
            clearInterval(timer)
        }
    }, 200)
    
    function clearTimer() {
        return clearInterval(timer)
    }
     return {cancel: clearTimer}
}
发表于 2021-08-08 10:03:02 回复(0)
function count(start, end) {
    console.log(start);
    let timer = setInterval(() => {
        console.log(++start);
        start >= end && clearInterval(timer);
    }, 100);
    return {cancel(){clearInterval(timer)}};
}

发表于 2021-07-29 18:18:18 回复(0)