实现一个打点计时器,要求
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 在这个函数中有啥用?
//求大神解答下。
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); } }; }