实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
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; }
前面那些用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) } */
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);} } }
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 } }