亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

javascript setTimeout倒計數的問題

javascript setTimeout倒計數的問題

冉冉說 2019-04-21 20:13:52
$('#test').on('click',function(){var$self=$(this);varsecs=60;for(vari=secs;i>=0;i--){window.setTimeout(function(){vartext=i+'秒后再次發送';console.log(i);$self.val(text);if(i==0){$self.val('發送驗證碼');}},(secs-i)*1000);}});就是發送驗證碼,然后60秒之后可以再次發送,想做一個倒計數的顯示,但是console.log(i)的輸出全是-1不知道是怎么回事?
查看完整描述

2 回答

?
海綿寶寶撒

TA貢獻1809條經驗 獲得超8個贊

$('#test').on('click',function()
{
var$self=$(this);
varsecs=60;
varfunc=function(){
vartext=secs+'秒后再次發送';
$self.val(text);
if(secs==0)
{
$self.val('發送驗證碼');
}else{
secs--;
window.setTimeout(func,1000);
}
};
window.setTimeout(func,1000);
});
                            
查看完整回答
反對 回復 2019-04-21
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

setTimeout是異步執行的,會在空閑的時候執行setTimeout中的函數,而這里的“空閑”大致指的是當前棧中代碼執行完畢,也就是這里的for語句執行結束,才會執行timeout中的函數。
所以這里的執行過程是:for語句注冊了60個timeout函數,for語句結束后,開始一個一個執行timeout函數。但是這里timeout中的i已經是for執行后的值,也就是-1。(具體請了解什么是閉包)
varsecs=60;
for(vari=secs;i>=0;i--){
window.setTimeout((function(t){
returnfunction(){
vartext=t+'秒后再次發送';
console.log(text);
};
})(i),(secs-i)*1000);
}
                            
查看完整回答
反對 回復 2019-04-21
  • 2 回答
  • 0 關注
  • 308 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號