setInterval(callback(),time)
最近在寫一個(gè)需求的時(shí)候,出了點(diǎn)小小的問題,在這做個(gè)記錄。
對于定時(shí)函數(shù)setInterval()大家應(yīng)該都不陌生,setInterval(callback(),time)就是說設(shè)置一個(gè)定時(shí)器,每隔time時(shí)間,
(當(dāng)然這個(gè)時(shí)間是以毫秒計(jì)算的,1秒=1000毫秒)執(zhí)行一次回調(diào)callback();
我剛開始這么寫的代碼:
function forbidden(){var time = 60;$('.getSms').attr('disabled','disabled');if(time>0){var timer = setInterval(function(){$('.getSms').text(time+'秒后重新發(fā)送');time--;};1000);}else{window.clearInterval(timer); $('.getSms').text('發(fā)送短信');$('.getSms').attr('disabled',false);}當(dāng)時(shí)是這么想的,單擊發(fā)送短信按鈕觸發(fā)forbidden(),初始化一個(gè)變量time=60,并且此時(shí)按鈕不可用,然后判斷:如果
time大于0,執(zhí)行定時(shí)器timer(time--),等到time小于等于0的時(shí)候,清除定時(shí)器,按鈕的顯示文字也改變,并且變?yōu)榭捎?#xff0c;
好像一切都是這么地呵護(hù)邏輯,但是!!!點(diǎn)擊按鈕之后,看著上面的數(shù)字由60一點(diǎn)一點(diǎn)地減,減到0之后,變成了-1,-2...
瞬間懵逼了,于是就在else語句里面打一個(gè)console.log(time),然后再跑一遍,等到數(shù)據(jù)為-1的時(shí)候,控制臺沒打印time值,
然后意識到,這個(gè)定時(shí)函數(shù)一直在跑,time=-1的時(shí)候,并沒有進(jìn)行判斷,于是~~~~把time的判斷放到callback()里面,像這樣:
function forbidden(){var time = 60;$('.getSms').attr('disabled','disabled');var timer = setInterval(function(){$('.getSms').text(time+'秒后重新發(fā)送');time--;if(time<0){console.log(time);window.clearInterval(timer); $('.getSms').text('發(fā)送短信');$('.getSms').attr('disabled',false);}}, 1000);}然后,問題解決。
事后,覺得可以這么理解,定時(shí)函數(shù)是一個(gè)獨(dú)立的空間,一旦開啟,就一直執(zhí)行(對后續(xù)代碼段造成阻塞),然而我們在定時(shí)器后
面規(guī)定,time<0的時(shí)候,清除定時(shí)器,這句代碼壓根一直都沒執(zhí)行,又怎么會(huì)生效呢,放在callback()里面就不一樣了,每隔1秒執(zhí)行
一次callback(),每執(zhí)行一次callback()就會(huì)判斷了,time是不是小于0啊,不是的話待會(huì)還是要執(zhí)行callback(),如果是的話,待會(huì)就
不執(zhí)行這個(gè)callback()了。
轉(zhuǎn)載于:https://www.cnblogs.com/eco-just/p/9160817.html
總結(jié)
以上是生活随笔為你收集整理的setInterval(callback(),time)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js 对象数组去重
- 下一篇: [AHOI2008] 紧急集合