实现一个打点计时器,要求
一、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
二、返回的对象中须要包含一个 cancel 方法,用于中止定时操做
三、第一个数须要当即输出数组
1.使用settimeoutapp
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 的参数this
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 对象spa
/三种方案 //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)(); }