超時(shí)調(diào)用和間歇調(diào)用區(qū)別
超時(shí)調(diào)用:在指定的時(shí)間過后執(zhí)行代碼摩泪。
/**
* setTimeout()
* param:
* param1——要執(zhí)行的代碼(可以是字符串笤虫,也可以是函數(shù))
* param2——以毫秒表示的時(shí)間(即在執(zhí)行代碼前需要等待多少毫秒)
*/
//不建議傳遞字符串,傳遞字符串可能會(huì)導(dǎo)致性能損失
setTimeout("alert('hello world')",1000);
//推薦的調(diào)用方式
setTimeout(function(){
alert("hello world!");
},1000);
調(diào)用setTimeout()之后壳贪,該方法會(huì)返回一個(gè)數(shù)值ID,表示超時(shí)調(diào)用哎榴。這個(gè)超時(shí)調(diào)用ID是計(jì)劃執(zhí)行代碼的唯一標(biāo)識(shí)符型豁,可以通過它來取消超時(shí)調(diào)用(clearTimeout())。
//設(shè)置超時(shí)調(diào)用
var timeout = setTimeout(function(){
alert("hello world!");
},1000);
//注意:把它取消
clearTimeout(timeout);
間歇調(diào)用:每隔指定的時(shí)間就執(zhí)行一次代碼尚蝌。直至間歇調(diào)用被取消或者頁面被卸載迎变。
/**
* setInterval()
* param:
* param1——要執(zhí)行的代碼(可以是字符串,也可以是函數(shù))
* param2——以毫秒表示的時(shí)間(即在執(zhí)行代碼前需要等待多少毫秒)
*/
//不建議傳遞字符串,傳遞字符串可能會(huì)導(dǎo)致性能損失
setInterval("alert('hello world')",10000);
//推薦的調(diào)用方式
setInterval(function(){
alert("hello world!");
},10000);
調(diào)用setInterval()之后飘言,該方法會(huì)返回一個(gè)數(shù)值ID衣形,表示超時(shí)調(diào)用。這個(gè)超時(shí)調(diào)用ID是計(jì)劃執(zhí)行代碼的唯一標(biāo)識(shí)符热凹,可以通過它來取消超時(shí)調(diào)用(clearInterval())泵喘。
var num = 0;
var max = 10;
var intervalId = null;
function incrementNumber(){
num++;
//如果執(zhí)行次數(shù)達(dá)到了max設(shè)定的值泪电,則取消后續(xù)尚未執(zhí)行的調(diào)用
if(num == max){
clearInterval(intervalId);
alert("Done");
}
}
intervalId = setInterval(incrementNumber,500);
使用超時(shí)調(diào)用實(shí)現(xiàn)間歇調(diào)用
var num = 0;
var max = 10;
function incrementNumber(){
num++;
//如果執(zhí)行次數(shù)未達(dá)到max設(shè)定的值般妙,則設(shè)置另一次超時(shí)調(diào)用
if(num < max){
setTimeout(incrementNumber,500);
}else{
alert("Done");
}
}
setTimeout(incrementNumber,500);
一般來說,最好是使用超時(shí)調(diào)用來模擬間歇調(diào)用相速。因?yàn)殚g歇調(diào)用可能會(huì)在前一個(gè)間歇調(diào)用結(jié)束之前啟動(dòng)碟渺,而使用超時(shí)調(diào)用可以避免這一點(diǎn)。