实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
function count(start, end) { var temp = start; console.log(temp); var timmer = setInterval(function(){ if(temp < end){ temp += 1; console.log(temp); }else{ clearInterval(timmer); } }, 100); var resObj = { timmer: timmer, cancel: function(){ clearInterval(this.timmer); } }; return resObj; }
function count(start, end) { var timerArr = []; for (var i = start;i<=end;i++){ (function(m){ timerArr[i]=setTimeout(function(){ console.log(m) }, (m-start)*100) })(i) } return { cancel: function(){ timerArr.forEach(function(time){ clearTimeout(time); }) } } }
function count(start, end) { console.log(start++);//第一个数需要立即输出 //setInterval(code,millisec,lang) //参数1:必需。要调用的函数或要执行的代码串 //参数2:必须。周期性执行或调用 code 之间的时间间隔,以毫秒计 //参数3:可选。 var time = setInterval(function(){ if(start <= end){ console.log(start++); }else{ clearInterval(time); } },100); return { cancel:function(){ clearInterval(time); } } } //注:setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式。 //方***不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。 //setTimeout() :在指定的毫秒数后调用函数或计算表达式,写法和setInterval()一样
function count(start, end) { console.log(start++); var id = setInterval(function() { start <= end ? console.log(start++) : clearInterval(id); }, 100); return { cancel : function() { clearInterval(id); } } }
function count(start, end) { console.log(start);//第一个数立即输出; var begin=setInterval(function(){ if(start < end){//判断开始数字是否小于结束数字(有可能只有一个数字) console.log(++start);//操作start之前,将start加一 } else{ clearInterval(begin);//如果输入的数据格式不对,开始数字小于结束数字,则计时器停止; } },100); return{ cancel:function(){//返回一个对象,该对象具有cancel方法 clearInterval(begin); } } }
function count(start, end) { console.log(start++); var timer=setInterval(function () { if (startconsole.log(start++); } else { clearInterval(timer); }
},100); return{ cancel:function () { clearInterval(timer); }
}
}
这个关于计时器的问题困扰了我很久,刚开始使用了for循环,但是执行结果总是直接一次性打印出所有数字。忘记了定时器本身就具有循环的功能以及自增自减的妙处。看了讨论里面的解答才茅塞顿开
function count(start, end) { var i=start; var st=setInterval(function () { console.log(i); i++; if(i>end){ clearInterval(st); } },100) return{ cancel: function(){ clearInterval(st); } } } //1.浏览器可以运行,但是测试过不了; //2.return 在这个函数中有啥用? //求大神解答下。