实现一个打点计时器,要求
1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
3、第一个数需要立即输出
1.使用settimeout
function count(start, end) { if(start<=end) { console.log(start++); timer = setTimeout(function() { count(start, end)},100); } return { cancel: function() { clearTimeout(timer); } } }
2. 用setinterval
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); } }; }
3. 将数组 arr 中的元素作为调用函数 fn 的参数
function argsAsArray(fn, arr) { return fn.apply(fn, arr); } //或者 function argsAsArray(fn, arr) { return fn.apply(this, arr); }
显然这里用call ,非常不合理 function argsAsArray(fn, arr) { return fn.call(fn, arr[0],arr[1],arr[2]); } //或者 function argsAsArray(fn, arr) { return fn.call(this, arr[0],arr[1],arr[2]); }
4. 将函数 fn 的执行上下文改为 obj 对象
/三种方案 //apply function speak(fn, obj) { return fn.apply(obj); } //call function speak(fn, obj) { return fn.call(obj); } //bind function speak(fn, obj) { return fn.bind(obj)(); }
原文:https://www.cnblogs.com/sarah-wen/p/10767008.html