實現一個打點計時器,要求
一、從 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)(); }