天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

認(rèn)識延遲時間為0的setTimeout

讓我們看看我之前的文章:JavaScript的9個陷阱及評點(diǎn),在第 9 點(diǎn) Focus Pocus 中提到的問題。原作者對這個認(rèn)識有所偏差,其實(shí)不只是 IE 的問題,而是現(xiàn)有 JavaScript 引擎對于線程實(shí)現(xiàn)的問題(關(guān)于線程,我的概念其實(shí)不多,如果不對,希望讀者多多指教)。. 我們來看 1 和 2。如果你能看看源代碼,會發(fā)現(xiàn)我們的任務(wù)很簡單,就是給文檔增加一個 input 文本框,并聚焦和選中。請現(xiàn)在分別點(diǎn)擊一下,可以看到,1 并沒有能夠聚焦和選中,而 2 可以。它們之間的區(qū)別在于,在執(zhí)行:

input.focus();
input.select();
時, 2 多了一個延遲時間為 0 的 setTimeout 的外圍函數(shù),即:

setTimeout(function(){
 input.focus();
 input.select();
}, 0);
按照 JavaScript: The Definitive Guide 5th 的 14.1 所說:

在實(shí)踐中,setTimeout 會在其完成當(dāng)前任何延宕事件的事件處理器的執(zhí)行,以及完成文檔當(dāng)前狀態(tài)更新后,告訴瀏覽器去啟用 setTimeout 內(nèi)注冊的函數(shù)。

其實(shí),這是一個把需要執(zhí)行的任務(wù)從隊列中跳脫的技巧。回到前面的例子,JavaScript 引擎在執(zhí)行 onkeypress 時,由于沒有多線程的同步執(zhí)行,不可能同時去處理剛創(chuàng)建元素的 focus 和 select 事件,由于這兩個事件都不在隊列中,在完成 onkeypress 后,JavaScript 引擎已經(jīng)丟棄了這兩個事件,正如你看到的例子 1 的情況。而在例子 2 中,由于setTimeout可以把任務(wù)從某個隊列中跳脫成為新隊列,因而能夠得到期望的結(jié)果。

這才是延遲事件為 0 的setTimeout的真正目的。在此,你可以看看例子 3,它的任務(wù)是實(shí)時更新輸入的文本,現(xiàn)在請試試,你會發(fā)現(xiàn)預(yù)覽區(qū)域總是落后一拍,比如你輸 a, 預(yù)覽區(qū)并沒有出現(xiàn) a, 在緊接輸入 b 時, a 才不慌不忙地出現(xiàn)。其實(shí)我們是有辦法讓預(yù)覽區(qū)跟輸入框同步地,在此我沒有給出答案,因為上面所說的,就是解決思路,try it yourself! 

JavaScript技術(shù)認(rèn)識延遲時間為0的setTimeout,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产麻豆精品久久一二三 | 亚洲区视频在线观看 | 少妇久久久久久被弄高潮 | 国产人妻系列无码专区97SS | 狠狠插影院 | WWW国产精品内射熟女 | 成年美女黄网站色app | 狼人大香伊蕉国产WWW亚洲 | 国产精品JK白丝AV网站 | 香港成人社区 | 亚洲乱码日产精品BD在线下载 | 嗯别插太快好深再深点 | 伦理片在线线手机版韩国免费6 | 亚洲网站视频在线观看 | 久久精品国产男包 | 国产超碰人人爱被IOS解锁 | mm625亚洲人成电影网 | 日日干夜夜爱 | 大香伊人中文字幕精品 | 亚洲AV久久无码精品九九软件 | 欧美成人免费一区二区三区不卡 | 超碰最新网站 | 果冻传媒MV免费播放在线观看 | 让男人玩尿道的女人 | 亚洲国产欧美日韩在线一区 | 奇米精品一区二区三区在线观看 | 欧美伊人久久大香线蕉综合69 | 亚洲乱码爆乳精品成人毛片 | 色青青草原桃花久久综合 | 国产成人免费a在线视频app | 97视频在线免费 | 大陆午夜伦理 | 高中生高潮抽搐喷出白浆视频 | 中文字幕午夜福利片 | 国产精品99久久久久久WWW | 97超视频在线观看 | 亚洲综合色五月久久婷婷 | 91精品欧美一区二区三区 | 国产视频精品在线偷拍 | 久久成人午夜电影mp4 | 亚洲专区区免费 |