一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

認識延遲時間為0的setTimeout

讓我們看看我之前的文章:JavaScript的9個陷阱及評點,在第 9 點 Focus Pocus 中提到的問題。原作者對這個認識有所偏差,其實不只是 IE 的問題,而是現(xiàn)有 JavaScript 引擎對于線程實現(xiàn)的問題(關于線程,我的概念其實不多,如果不對,希望讀者多多指教)。. 我們來看 1 和 2。如果你能看看源代碼,會發(fā)現(xiàn)我們的任務很簡單,就是給文檔增加一個 input 文本框,并聚焦和選中。請現(xià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 所說:

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

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

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

JavaScript技術認識延遲時間為0的setTimeout,轉載需保留來源!

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

主站蜘蛛池模板: 亚洲婷婷综合色高清在线 | 伊人精品网 | 51国产午夜精品免费视频 | 午夜亚洲国产成人不卡在线 | 乱人伦一区二区三区 | 亚洲成人贴图 | 黄网视频在线观看 | 成人免费观看黄a大片夜月 成人免费观看视频 | 国产福利在线免费观看 | 色哟哟在线观看精品大全视频 | 欧美一区二区三区婷婷月色 | 国产高清国内精品福利 | 丁香六月五月婷婷 | 成人午夜视频网站 | 四虎影视永久免费 | 视频一二三区 | 四虎国产永久在线精品免费观看 | 国产福利一区二区 | 91麻豆国产精品91久久久 | 国产级a爱做片免费观看 | 四虎澳门永久8848在线影院 | 在线观看精品视频一区二区三区 | 91久久亚洲国产成人精品性色 | 中文字幕一区二区三区四区 | 色综合图片二区150p | 伊人亚洲综合网 | 色婷婷激婷婷深爱五月小说 | 国产xh98hx在线观看 | 国色天香一区三区四区小说 | 亚洲综合丁香婷婷六月香 | 久久九九亚洲精品 | 国产成人啪午夜精品网站 | www欧美在线观看 | 中文字幕亚洲一区二区v@在线 | 99精品国产兔费观看66 | 黄色免费在线观看 | 国产欧美一区二区精品性色99 | 美国bbbbbbbbb免费毛片 | 国产精品视频1区 | 亚洲图片另类小说 | 婷婷丁香综合网 |