JavaScript是單線程語言,但它允許通過設置超時值和間歇時間值來調度代碼在特定的時刻執行。前者是在指定的時間過后執行代碼,而后者則是每隔指定的時間就執行一次代碼。
超時調用需要使用window對象的setTimeout()方法,它接受兩個參數:要執行的代碼和以毫秒表示的時間(即在執行代碼前需要等待多少毫秒)。其中,第一個參數可以是一個包含JavaScript代碼的字符串(就和在eval()函數中使用的字符串一樣),也可以是一個函數。例如,下面對
setTimeout()的兩次調用都會在一秒鐘后顯示一個警告框:
//不建議傳遞字符串!
setTimeout('alert(’Hello worldl’) “, 1000);
//推薦的調用方式
setTimeout( function() {
alert( "Hello world!");
}, 1000);
雖然這兩種調用方式都沒有問題,但由于傳遞字符串可能導致性能損失,因此南昌網站建設公司工程師不建議以字符串作為第一個參數。
調用setTimeout()之后,該方法會返回一個數值ID,表示超時調用。這個超時調用ID是計劃執行代碼的唯一標識符,可以通過它來取消超時調用。要取消尚未執行的超時調用計劃,可以調用clearTimeout()方法并將相應的超時調用ID作為參數傳遞給它,如下所示:
//設置超時調用
var timeoutld=setTimeout( fune tion() (
alert( "Hello world!");
), lOOO) ;
//注意:把它取消
clearTimeout(timeoutld);
只要是在指定的時間尚未過去之前調用clearTimeout(),就可以完全取消超時調用。前面的代碼在設置超時調用之后馬上又調用了clearTimeout(),結果就跟什么也沒有發生一樣。
超時調用的代碼都是在全局作用域中執行的,因此函數中this的值通常會指向window對象。
間歇調用與超時調用類似,只不過它會按照指定的時間間隔重復執行代碼,直至間歇調用被取消或者頁面被卸載。設置間歇調用的方法是setlnterval(),它接受的參數與setTimeout()相同:要執行的代碼(字符串或函數)和每次執行之前需要等待的毫秒數。下面來看一個例子:
//不建議傳遞字符串!
setlnterval ("alert('Hello world!') 0);
//推薦的調用方式
setlnterval( function() {’
alert( "Hello worldl");
}, 10000);
調用setlnterval()方法同樣也會返回一個間歇調用ID,該ID可用于在將來某個時刻取消間歇調用。要取消尚未執行的間歇調用,可以使用clearlnterval()方法并傳人相應的間歇調用ID。取消間歇調用的重要性要遠遠高于取消超時調用,南昌網站設計公司技術人員認為在不加干涉的情況下,間歇調用將會一直執行到頁面卸載。以下是一個常見的使用間歇調用的例子:
var num=O:
var max=10;
var intervalld=null;
function incrementNumber() {
num++:
//如果執行次數達到了max設定的值,則取消后續尚未執行的調用
if (num==max) {
clearlnterval(intervalld);
alert("Done");
}
}
intervalld=setlnterval( incrementNurnber, 500)j
在這個例子中,變量mun每半秒鐘遞增一次,當遞增到最大值時就會取消先前設定的間歇調用。這個模式也可以使用超時調用來實現,如下所示:
var num=O:
var max=10;
function incrementNumber() {
num++:
}
可見,在使用超時調用時,沒有必要跟蹤超時調用ID,因為每次執行代碼之后,如果不再設置另一次超時調用,調用就會自行停止。一般認為,使用超時調用來模擬間歇調用的是一種最佳模式。南昌網絡公司技術人員認為在開發環境下,很少使用真正的間歇調用,原因是后一個間歇調用可能會在前一個間歇調用結束之前啟動,而像前面示例中那樣使用超時調用,則完全可以避免這一點。所以,最好不要使用間歇調用。
本文僅限內部技術人員學習交流,不得作于其他商業用途.文章出自:南昌網站制作公司-百恒網絡 http://www.527701.com 如轉載請注明出處!