亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

javascript - js 異步的問(wèn)題,settimeout的問(wèn)題
伊謝爾倫
伊謝爾倫 2017-05-19 10:33:22
0
5
757
var?i?=?0,?timer,?j?=?0;
while(i++?<?5)?{
??timer?=?window.setTimeout(function(){
????j++;
????alert(j);
??},?1000);
}
clearTimeout(timer);

輸出的是1,2,3,4
5怎麼沒(méi)輸出?還有為什麼是這樣輸出的?他不是每次都賦值覆蓋了嗎?怎麼還會(huì)執(zhí)行?順序是什麼? clearTimeout這語(yǔ)句是在什麼時(shí)候執(zhí)行的
如果稍微改下
var?i?=?0,?timer,?j?=?0;
while(i ?<?5)?{
??timer?=?. function(){
????j ;
????alert(j);
??},?i*1000);
}
clearTimeout(timer);
#這樣就是每隔一秒輸出,如果上面的問(wèn)題解決了,那麼沒(méi)毛病
再繼續(xù)改

    var?i?=?0,?timer,?j?=?0;
    while(i++?<?5)?{
    ??timer?=?window.setTimeout(function(){
    ????j++;
    ????alert(j);
    ??},?j*1000);
    }

clearTimeout(timer);
這個(gè)時(shí)候,他是同時(shí)輸出的,為什么跟上面用i的不一樣?

















謝謝各位的回答哈。
伊謝爾倫
伊謝爾倫

小伙看你根骨奇佳,潛力無(wú)限,來(lái)學(xué)PHP伐。

全部回覆(5)
PHPzhong

首先,循環(huán)體內(nèi)創(chuàng)建了5個(gè)定時(shí)器,每個(gè)定時(shí)器有各自的ID,ID在呼叫setTimeout時(shí)被返回,是一個(gè)數(shù)值。
其次,timer只是保存定時(shí)器的ID,并不會(huì)修改定時(shí)器的ID,所以當(dāng)循環(huán)結(jié)束時(shí),timer只是保存了最后一個(gè)定時(shí)器的ID。賦值覆蓋的是什么應(yīng)該清楚了吧。
定時(shí)器里的函數(shù)是在clearTimeout執(zhí)行完後開(kāi)始執(zhí)行的。所以最後一個(gè)定時(shí)器被清除。其它定時(shí)器照常執(zhí)行。

最後那個(gè),while執(zhí)行的時(shí)候setTimeout里的函數(shù)并沒(méi)有被調(diào)用,因此j++并沒(méi)有執(zhí)行,所以在循環(huán)體內(nèi)j一直是0。
注:匿名函數(shù)只是作為一個(gè)參數(shù)被傳入setTimeout函數(shù)中。

小葫蘆

第一問(wèn),當(dāng)i=4時(shí),本來(lái)應(yīng)該過(guò)1秒鐘再alert(j==5)的,但是接下來(lái)立刻執(zhí)行了clearTimeout(timer)取消了alert(j)

第二問(wèn)同上

第三問(wèn),當(dāng)i=0時(shí),j為0,這裡你可能認(rèn)為會(huì)直接執(zhí)行alert操作,但事實(shí)卻不是,setTimeout(code,millisec)是把code放到一個(gè)等待隊(duì)列中後面再執(zhí)行,所以當(dāng)i=1時(shí)j還是0,同理i=2,3,4,5,所以會(huì)連續(xù)輸出1234

滿(mǎn)天的星座

因?yàn)樗械?code>setTimeout是在clearTimeout(timer)之後才開(kāi)始執(zhí)行的,已經(jīng)把第五個(gè)清除掉了。

最後那個(gè)是因?yàn)?code>while執(zhí)行的時(shí)候j0,所有的setTimeout都是延遲0後才開(kāi)始執(zhí)行。

過(guò)去多啦不再A夢(mèng)

好好看看這個(gè) while(i++

迷茫

就回答第一個(gè)吧,因?yàn)閟etTimeout是非同步執(zhí)行的,所以clearTimeout(timer)會(huì)清空第一個(gè)計(jì)時(shí)器。也就是說(shuō)i=0時(shí)不會(huì)alert出來(lái),j也沒(méi)有執(zhí)行j++,j還是等於0的。過(guò)了一秒鐘,再次產(chǎn)生定時(shí)器,這時(shí)i=1,j=0,由於後面的clearTimeout(timer)是同步執(zhí)行,所以不再清空定時(shí)器,這樣就看到了你現(xiàn)在的結(jié)果

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板