摘要:調(diào)用之后,該方法會返回一直數(shù)值,表示超時調(diào)用。這個超時調(diào)用是計劃執(zhí)行代碼的唯一標識符,可以通過它來取消超時調(diào)用。一般認為,使用超時調(diào)用來模擬間歇調(diào)用的是一種最佳模式。
JavaScript是單線程語言,但它允許通過設置超時值和間歇時間值來調(diào)度代碼在特定的時刻執(zhí)行。前者是在指定的時間過后執(zhí)行代碼,而后者是每隔指定的時間就執(zhí)行一次代碼。
setTimeout 超時調(diào)用超時調(diào)用需要使用window對象的setTimeout()方法,它接受兩個參數(shù):要執(zhí)行的代碼和以毫秒表示的時間(即在執(zhí)行代碼前需要等待多少秒)。第一個參數(shù)可以是一個包含JavaScript代碼的字符串,也可以是一個函數(shù),但是由于傳遞字符串可能導致性能損失,因此不建議以字符串作為第一個參數(shù)。
下面是重點哦!!!!
第二個參數(shù)是一個表示等待多長時間的毫秒數(shù),但經(jīng)過該時間后指定的代碼不一定會執(zhí)行。JavaScript是一個單線程的解釋器,因此一定時間內(nèi)只能執(zhí)行一段代碼。為了控制要執(zhí)行的代碼,就有一個JavaScript任務隊列。這些任務會按照將它們添加到隊列的順序執(zhí)行。setTimeout()的第二個參數(shù)告訴JavaScript再過多長時間把當前任務添加到隊列中。如果隊列是空的,那么添加的代碼會立即執(zhí)行;如果隊列不是空的,那么它就要等前面的代碼執(zhí)行完了后再執(zhí)行。
調(diào)用setTimeout()之后,該方法會返回一直數(shù)值ID,表示超時調(diào)用。這個超時調(diào)用ID是計劃執(zhí)行代碼的唯一標識符,可以通過它來取消超時調(diào)用。要取消尚未執(zhí)行的超時調(diào)用計劃,可以調(diào)用clearTimeout()方法并將相應的超市調(diào)用ID作為參數(shù)傳遞給它。如:
// 設置超時調(diào)用 var timeoutId = setTimeout(function(){ alert("Hello World!"); },100); // 取消超時調(diào)用 clearTimeout(timeoutId);
只要在指定的時間尚未過去之前調(diào)用clearTimeout(),就可以完全取消超時調(diào)用。前面的代碼在設置超時調(diào)用后馬上又調(diào)用了clearTimeout(),結果就跟什么也沒有發(fā)生一樣。
注:超時調(diào)用的代碼都是在全局作用域中執(zhí)行的,因此函數(shù)中this的值在非嚴格模式下指向window對象,嚴格模式下是undefined。
間歇調(diào)用與超時調(diào)用類似,只不過它會按照指定的時間間隔重復執(zhí)行代碼,直至間歇調(diào)用被取消或者頁面被卸載。
小結在使用超時調(diào)用時,沒有必要跟蹤超時調(diào)用ID,因為每次執(zhí)行代碼之后,如果不再設置另一次超時調(diào)用,調(diào)用就會自行停止。一般認為,使用超時調(diào)用來模擬間歇調(diào)用的是一種最佳模式。在開發(fā)環(huán)境下,很少使用真正的間歇調(diào)用,原因是后一個間歇調(diào)用可能會在前一個間歇調(diào)用結束前啟動。
使用超時調(diào)用則可以完全避免這一點。如下:
var num = 0; var max = 10; function incrementNumber () { num++; if (num < max) { setTimeout(incrementNumber,500); } else { alert("Done"); } } setTimeout(incrementNumber,500);
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80641.html
摘要:注意如果主邏輯的代碼執(zhí)行時間已經(jīng)超過了第二個參數(shù)設置的時間,那么等運行到該回調(diào)函數(shù)時,它會忽略掉這個時間,并立即執(zhí)行。如果某一個進行大量的計算,那么它就會阻塞在當前的回調(diào)函數(shù)中,等待該計算完成后,再執(zhí)行下一個的回調(diào)函數(shù)。 setTimeout() ? JavaScript是一個單線程的語言,也就是說它同一時間只能執(zhí)行一段代碼,接下來我們通過兩個例子說明一下單線程語言和多線程語言的...
摘要:不過兩者各有各的應用場景。方法實際上,和的語法相同。這意味著如果函數(shù)的主體部分需要秒鐘執(zhí)行完,那么整個函數(shù)則要每秒鐘才執(zhí)行一次。不過還是有辦法可以終止和函數(shù)的執(zhí)行。 var intervalProcess = setInterval(alert(GOAL!), 3000); 這個變量命名可以在實際代碼中采用 這兩個方法都可以用來實現(xiàn)在一個固定時間段之后去執(zhí)行JavaScript。不過...
摘要:設置和清除定時器直接引用忍者秘籍中的圖片注意定時器的時間間隔設為,也會有幾毫秒的延遲。以上參考資料忍者秘籍第章馴服線程和定時器 showImg(https://segmentfault.com/img/remote/1460000015353524?w=1024&h=681); 前言 前段時間剛看完《JS忍者秘籍》,雖說是15年出版的,有些東西是過時了,但像對原型鏈、閉包、正則、定時器...
摘要:一個頁面在瀏覽器顯示出來至少需要個線程,分別是引擎,渲染,事件觸發(fā)。其中事件觸發(fā)是獨立于其他個執(zhí)行的,而和是相互排斥的,也就是說同一個時間二者只有一個在工作。 作為DOM本身十分重要的2個異步執(zhí)行函數(shù),初學者感覺這個很不好理解,我簡單寫一寫我的理解 setTimeout (func, millisec); setInterval(func, millisec); 這兩個方法在形式看起來...
摘要:方法描述周期性地調(diào)用一個函數(shù)或者執(zhí)行一段代碼。方法可取消由方法設置的。語法詳解是該延時操作的數(shù)字此隨后可以用來作為方法的參數(shù)。需要注意的是,不支持第一種語法中向延遲函數(shù)傳遞額外參數(shù)的功能。該值標識要取消的延遲執(zhí)行代碼塊。 方法 描述 setInterval 周期性地調(diào)用一個函數(shù)(function)或者執(zhí)行一段代碼。 clearInterval 取消掉用setI...
閱讀 3650·2021-09-22 15:15
閱讀 3555·2021-08-12 13:24
閱讀 1309·2019-08-30 15:53
閱讀 1816·2019-08-30 15:43
閱讀 1178·2019-08-29 17:04
閱讀 2792·2019-08-29 15:08
閱讀 1573·2019-08-29 13:13
閱讀 3084·2019-08-29 11:06