摘要:定義對(duì)象,用于保存映射到真實(shí)每調(diào)用一次就會(huì)自增的一個(gè)這里注意要使用局部變量保存哦,避免函數(shù)內(nèi)部直接引用,因?yàn)榭赡軙?huì)再次變化說明使用時(shí)除了需要加上一個(gè)對(duì)象做命名空間外其實(shí)也是沒辦法哦,因?yàn)楹托枰蚕硪粋€(gè)叫做的映射表,其他與直接調(diào)用原生,無異舉
talk is cheap:
var util = (function(){ //定義intervalObj對(duì)象,用于保存intervalId映射到真實(shí)timeoutId var intervalObj = {} //每調(diào)用一次_setInterval就會(huì)自增1的一個(gè)intervalId var intervalId = 0 var _setInterval = function(fn, interval){ //這里注意要使用局部變量保存intervalId哦,避免next函數(shù)內(nèi)部直接引用intervalId,因?yàn)閕ntervalId可能會(huì)再次變化 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} })()
說明:使用時(shí)除了需要加上一個(gè)util對(duì)象做命名空間外(其實(shí)也是沒辦法哦,因?yàn)閡til.setInterval和util.clearInterval需要共享一個(gè)叫做intervalObj的映射表),其他與直接調(diào)用原生setInterval,clearInterval無異
舉個(gè)栗子?:
//開始一個(gè)定時(shí)執(zhí)行函數(shù) var intervalId = util.setInterval(function(){ console.log("a") }, 1000) //10秒之后,清除掉定時(shí)器 setTimeout(function(){ //實(shí)際清除代碼 util.clearInterval(intervalId) }, 10000)
各路大神如果其他解決方案,請(qǐng)一定要留言賜教,并收下我的膝蓋
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/85196.html
摘要:瀏覽器渲染進(jìn)程瀏覽器內(nèi)核進(jìn)程,內(nèi)部是多線程的默認(rèn)每個(gè)頁面一個(gè)進(jìn)程,互不影響。事件觸發(fā)線程歸屬于瀏覽器而不是引擎,用來控制事件循環(huán)可以理解成引擎自己都忙不過來,需要瀏覽器另開線程協(xié)助。 線程和進(jìn)程 進(jìn)程和線程的概念可以這樣理解: 進(jìn)程是一個(gè)工廠,工廠有它的獨(dú)立資源--工廠之間相互獨(dú)立--線程是工廠中的工人,多個(gè)工人協(xié)作完成任務(wù)--工廠內(nèi)有一個(gè)或多個(gè)工人--工人之間共享空間 工廠有多個(gè)工人...
摘要:瀏覽器渲染進(jìn)程瀏覽器內(nèi)核進(jìn)程,內(nèi)部是多線程的默認(rèn)每個(gè)頁面一個(gè)進(jìn)程,互不影響。事件觸發(fā)線程歸屬于瀏覽器而不是引擎,用來控制事件循環(huán)可以理解成引擎自己都忙不過來,需要瀏覽器另開線程協(xié)助。 線程和進(jìn)程 進(jìn)程和線程的概念可以這樣理解: 進(jìn)程是一個(gè)工廠,工廠有它的獨(dú)立資源--工廠之間相互獨(dú)立--線程是工廠中的工人,多個(gè)工人協(xié)作完成任務(wù)--工廠內(nèi)有一個(gè)或多個(gè)工人--工人之間共享空間 工廠有多個(gè)工人...
摘要:回調(diào)函數(shù),一般在同步情境下是最后執(zhí)行的,而在異步情境下有可能不執(zhí)行,因?yàn)槭录]有被觸發(fā)或者條件不滿足。同步方式請(qǐng)求異步同步請(qǐng)求當(dāng)請(qǐng)求開始發(fā)送時(shí),瀏覽器事件線程通知主線程,讓線程發(fā)送數(shù)據(jù)請(qǐng)求,主線程收到 一直以來都知道JavaScript是一門單線程語言,在筆試過程中不斷的遇到一些輸出結(jié)果的問題,考量的是對(duì)異步編程掌握情況。一般被問到異步的時(shí)候腦子里第一反應(yīng)就是Ajax,setTimse...
摘要:事件完成,回調(diào)函數(shù)進(jìn)入。我們來分析一段較復(fù)雜的代碼,看看你是否真的掌握了的執(zhí)行機(jī)制第一輪事件循環(huán)流程分析如下整體作為第一個(gè)宏任務(wù)進(jìn)入主線程,遇到,輸出。宏任務(wù)微任務(wù)第三輪事件循環(huán)宏任務(wù)執(zhí)行結(jié)束,執(zhí)行兩個(gè)微任務(wù)和。 關(guān)于JavaScript 首先js是單線程的,執(zhí)行任務(wù)肯定是一個(gè)接著一個(gè)。在最新的html5中提出了web-worker,但是JavaScript是單線程這一核心沒有改變,一...
摘要:一什么是定時(shí)器提供了一些原生方法來實(shí)現(xiàn)延時(shí)去執(zhí)行某一段代碼,下面來簡(jiǎn)單介紹一下設(shè)置一個(gè)定時(shí)器,在定時(shí)器到期后執(zhí)行一次函數(shù)或代碼段定時(shí)器延遲后執(zhí)行的函數(shù)延遲后執(zhí)行的代碼字符串,不推薦使用原理類似延遲的時(shí)間單位毫秒,默認(rèn)值為向延遲函數(shù)傳遞而外的 一、什么是定時(shí)器 JS提供了一些原生方法來實(shí)現(xiàn)延時(shí)去執(zhí)行某一段代碼,下面來簡(jiǎn)單介紹一下 setTimeout: 設(shè)置一個(gè)定時(shí)器,在定時(shí)器到期后執(zhí)行...
閱讀 1403·2023-04-26 01:28
閱讀 2136·2021-11-08 13:28
閱讀 2385·2021-10-12 10:17
閱讀 2414·2021-09-28 09:46
閱讀 4254·2021-09-09 09:33
閱讀 3790·2021-09-04 16:40
閱讀 1278·2019-08-29 15:21
閱讀 2756·2019-08-26 17:17