setTimeout() 定時(shí)只執(zhí)行一次
用法:
setTimeout( x , 1000 ); ===> 1000ms后執(zhí)行x函數(shù)
x不能加();加括號(hào)后會(huì)立即執(zhí)行 ,執(zhí)行后返回值是undefined筐眷,執(zhí)行順序是先讀()里的
setTimeout( x , 1000 );
function x(){
alert( 1 );
}
這里可以看成
var x = xxx;
setTimeout( x , 1000 ); ===>先執(zhí)行x;
另一種寫(xiě)法
setTimeout( ' x() ' , 2000 )
會(huì)當(dāng)成js字符串代碼來(lái)讀
字符串里可以寫(xiě)一段執(zhí)行的代碼( setTimeout驯嘱、setInterval璃弄、eval() 這三種方法可以用這樣寫(xiě)法)
例灾茁、
setTimeout( 'alert( 8888 );alert( 9999 )' , 2000 );
注意:用字符串這種方法時(shí)調(diào)用的x()是全局函數(shù)才可以
!function (){
setTimeout( 'a()',1000 );
function a(){
alert( 5 ); ===>報(bào)錯(cuò):"a()"要是全局的
}
}();
setTimeout()調(diào)用函數(shù)且傳參幾種寫(xiě)法
一诚纸、
setTimeout( x , 2000 , 10 , 10 );
function x( a , b ){
alert( a+b ); ===>彈出20
}
二撰筷、
setTimeout( bind( null , 10 , 10 ),2000 );
三、
setTimeout( function(){
x( 10,10 );
},2000)
setInterval() 循環(huán)執(zhí)行
括號(hào)里寫(xiě)法跟setTimeout一樣
setInterval( x , 2000 );
function x(){
alert( 1 ); ===>循環(huán)每2秒執(zhí)行一次畦徘;
}
注意:時(shí)間是沒(méi)辦法到0的毕籽,最短最低是瀏覽器的頻率井辆,瀏覽器刷新頻率 13~20
setTimeout( function (){
alert( 2 );
},0 ) 先彈1再?gòu)? setTimeout延遲執(zhí)行
alert( 1 ) ; ===>立即執(zhí)行
清除定時(shí)器
clearTimeout();只執(zhí)行一次時(shí)為什么還要清呢关筒?因?yàn)橐粋€(gè)網(wǎng)站如果測(cè)到你是vip就不用彈vip的廣告;
clearInterval();
var t = setTimeout( function(){
alert( 5 );
} , 5000 );
document.onclick = function (){
clearTimeout( t );
}
setInterval 特殊調(diào)用
setInterval( fn() , 1000 ) //fn()馬上會(huì)執(zhí)行蒸播,下面函數(shù)返回的是fn 執(zhí)行完函數(shù)后變成 setInterval( fn , 1000 )
這里可以看 var a = fn() ===自執(zhí)行后是fn 所以a=fn setInterval( a , 1000 )
function fn(){
num ++;
console.log( num );
return fn;
}
setTimeout代替setInterval
每隔13ms執(zhí)行一次函數(shù)
假設(shè)要執(zhí)行函數(shù)里的代碼內(nèi)容很多袍榆,多到下一次函數(shù)執(zhí)之后還沒(méi)完包雀;
當(dāng)用setInterval()時(shí) 只要時(shí)間一到就立馬再調(diào)用里面的代碼馏艾,不用等到所有代碼執(zhí)行完再調(diào)用;
setTimeout( function fn(){
alert( 1 );
setTimeout( fn , 1000); // 上面執(zhí)行到這里馬上會(huì)調(diào)用自己奴愉,再?gòu)闹匦聢?zhí)行一次琅摩;
},1000)
這個(gè)方法比setInterval好,它可以保證前面的代碼執(zhí)行完再調(diào)用锭硼;(再做動(dòng)畫(huà)的時(shí)候會(huì)用到房资;)
同步與異步
7點(diǎn)時(shí)在搬磚
8點(diǎn)時(shí)在搬磚
9點(diǎn)時(shí)在搬磚
9點(diǎn)老板過(guò)來(lái)說(shuō):晚上7點(diǎn)一起去吃飯
繼續(xù)搬
.....
這時(shí)在搬磚的事就是同步的,晚上7點(diǎn)一起去吃飯屬于異步檀头,要等搬磚的事全部做完再去
setTimeout(function ( ) {
alert( 1 )
})
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
console.log( 'a' );
先打印a再?gòu)棿? 定時(shí)器是異步 要等同步做完才會(huì)做轰异;
異步操作有:帶src ajax 定時(shí)器