talk is cheap:函數
var util = (function(){ //定義intervalObj對象,用於保存intervalId映射到真實timeoutId var intervalObj = {} //每調用一次_setInterval就會自增1的一個intervalId var intervalId = 0 var _setInterval = function(fn, interval){ //這裏注意要使用局部變量保存intervalId哦,避免next函數內部直接引用intervalId,由於intervalId可能會再次變化 var thisIntervalId = ++intervalId function next(){ intervalObj[thisIntervalId] = setTimeout(function(){ fn() next() }, interval) } next() return thisIntervalId } var _clearInterval = function(intervalId){ clearTimeout(intervalObj[intervalId]) } return {setInterval: _setInterval, clearInterval: _clearInterval} })()
說明:使用時除了須要加上一個util對象作命名空間外(其實也是沒辦法哦,由於util.setInterval和util.clearInterval須要共享一個叫作intervalObj的映射表),其餘與直接調用原生setInterval,clearInterval無異this
舉個栗子?:code
//開始一個定時執行函數 var intervalId = util.setInterval(function(){ console.log('a') }, 1000) //10秒以後,清除掉定時器 setTimeout(function(){ //實際清除代碼 util.clearInterval(intervalId) }, 10000)
各路大神若是其餘解決方案,請必定要留言賜教,並收下個人膝蓋對象