js 定時器

1. setTimeout()

setTimeout函數(shù)用來指定某個函數(shù)或某段代碼,在多少毫秒之后執(zhí)行。它返回一個整數(shù)踪区,表示定時器的編號,以后可以用來取消這個定時器橱野。

var timerId = setTimeout(func|code, delay);
console.log(1);
setTimeout('console.log(2)',1000);
console.log(3);
// 1
// 3
// 2

除了前兩個參數(shù)朽缴,setTimeout還允許更多的參數(shù)。它們將依次傳入推遲執(zhí)行的函數(shù)(回調(diào)函數(shù))水援。

setTimeout(function(a,b){
  console.log(a+b);
},1000,1,1)
var x = 1;

var obj = {
  x: 2,
  y: function () {
    console.log(this.x);
  }
};

setTimeout(obj.y, 1000) // 1

上面代碼輸出的是1,而不是2茅郎。因為當obj.y在1000毫秒后運行時蜗元,this所指向的已經(jīng)不是obj了,而是全局環(huán)境系冗。
解決方法是

setTimeout(function () {
  obj.y();
}, 1000);
// 2

setTimeout(obj.y.bind(obj), 1000)

2. setInterval

setInterval的一個常見用途是實現(xiàn)輪詢奕扣。下面是一個輪詢 URL 的 Hash 值是否發(fā)生變化的例子。

var hash = window.location.hash;
var hashWatcher = setInterval(function(){
  if (window.location.hash!= hash){updatePage()};
},1000)

3. clearTimeout() clearInterval()

var id1 = setTimeout(f, 1000);
var id2 = setInterval(f, 1000);

clearTimeout(id1);
clearInterval(id2);

setTimeout和setInterval返回的整數(shù)值是連續(xù)的掌敬,也就是說惯豆,第二個setTimeout方法返回的整數(shù)值,將比第一個的整數(shù)值大1

(function(){
// 每輪事件循環(huán)檢查一次
  var gid = setInterval(clearAllTimeouts, 0);
  function clearAllTImeouts() {
  var id = setTimeout(function(){}, 0);
  where(id >0){
  if(id ! = gid) {clearTimeout(id);} id --;
  }
  }
})

debounce

防抖動

$('textarea').on('keydown', debounce(ajaxAction, 2500));

function debounce(fn, delay) {
  var timer = null;
  return function() {
  var context = this;
  var args = arguments;
  clearTImeout(timer);
  timer = setTime
  }
}

setTimeout(f, 0)

1. 含義

setTimeout的作用是將代碼推遲到指定時間執(zhí)行奔害,如果指定時間為0楷兽,即setTimeout(f,0)
setTimeout(f, 0)這種寫法的目的是,盡可能早地執(zhí)行f华临,但是并不能保證立刻就執(zhí)行f芯杀。

document.getElementById('input-box').onkeypress = function (event) {
  this.value = this.value.toUpperCase();
}

上面代碼想在用戶每次輸入文本后,立即將字符轉(zhuǎn)成大寫雅潭。但是實際上揭厚,它只能將本次輸入前的字符轉(zhuǎn)為大寫,因為瀏覽器此時還沒有接受到新的文本扶供,所以this.value 取不到最新輸入的那個字符筛圆,只有用setTimeout改寫,上面的代碼才能發(fā)揮作用

document.getElementById('input-box').onkeypress = function() {
var self = this;
setTimeout(function(){
self.value = self.value.toUpperCase();  
},0)
}

上面代碼將代碼放入setTimeout之中椿浓,就能使得它在瀏覽器接收到文本之后觸發(fā)太援。
由于setTimeout(f, 0)實際上意味著一铅,將任務放到瀏覽器最早可得的空閑時段執(zhí)行,所以那些計算量大扼菠、耗時長的任務烛亦,常常會被放到幾個小部分,分別放到setTimeout(f, 0)里面執(zhí)行唧垦。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末捅儒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子振亮,更是在濱河造成了極大的恐慌巧还,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坊秸,死亡現(xiàn)場離奇詭異麸祷,居然都是意外死亡,警方通過查閱死者的電腦和手機褒搔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門阶牍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人星瘾,你說我怎么就攤上這事走孽。” “怎么了琳状?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵磕瓷,是天一觀的道長。 經(jīng)常有香客問我念逞,道長困食,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任翎承,我火速辦了婚禮硕盹,結果婚禮上,老公的妹妹穿的比我還像新娘审洞。我一直安慰自己莱睁,他們只是感情好,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布芒澜。 她就那樣靜靜地躺著仰剿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痴晦。 梳的紋絲不亂的頭發(fā)上南吮,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音誊酌,去河邊找鬼部凑。 笑死露乏,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的涂邀。 我是一名探鬼主播瘟仿,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼比勉!你這毒婦竟也來了劳较?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤浩聋,失蹤者是張志新(化名)和其女友劉穎观蜗,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衣洁,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡墓捻,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了坊夫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砖第。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖践樱,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拷邢,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布屎慢,位于F島的核電站瞭稼,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏腻惠。R本人自食惡果不足惜环肘,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望集灌。 院中可真熱鬧悔雹,春花似錦、人聲如沸欣喧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唆阿。三九已至益涧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間驯鳖,已是汗流浹背闲询。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工久免, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扭弧。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓阎姥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親鸽捻。 傳聞我的和親對象是個殘疾皇子呼巴,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 定時器 JavaScript提供定時執(zhí)行代碼的功能,叫做定時器(timer)泊愧,主要由setTimeout()和se...
    李諾哦閱讀 1,006評論 0 0
  • 1删咱、 單線程屑埋、任務隊列的概念 單線程: JavaScript是一個單線程語言,瀏覽器只會分配一個javascrip...
    海山城閱讀 1,031評論 0 1
  • JavaScript 提供定時執(zhí)行代碼的功能,叫做定時器(timer)痰滋,主要由setTimeout()和setIn...
    oWSQo閱讀 3,801評論 2 1
  • 前言:對定時器的小整理摘能。 JS單線程 Javascript語言的執(zhí)行環(huán)境是"單線程"(single thread)...
    一包閱讀 315評論 0 0
  • 從JS執(zhí)行機制說起 瀏覽器(或者說JS引擎)執(zhí)行JS的機制是基于事件循環(huán)。 由于JS是單線程敲街,所以同一時間只能執(zhí)行...
    love2013閱讀 864評論 0 1