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

認識延遲時間為0的setTimeout

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

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

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

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

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

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

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

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

主站蜘蛛池模板: 少妇系列之白嫩人妻 | 快穿女主有名器的H纯肉黄暴拉文 | 99久久免费国内精品 | 久久草福利自拍视频在线观看 | 调教美丽的白丝袜麻麻视频 | 欧美视频精品一区二区三区 | 国产亚洲精品久久久久久白晶晶 | 国产精品视频人人做人人爽 | 亚洲日本欧美国产在线视 | 日产亚洲一区二区三区 | 人妻美妇疯狂迎合 | 亚洲AV无码国产精品色午夜情 | 精品国产一区二区三区久久影院 | 高h全肉图 | 欧美三级黄色大片 | 免费观看视频成人国产 | 中国大陆一级毛片免费 | 68日本xxxxxxxx79| 偷拍精品视频一区二区三区 | 撕烂衣服扒开胸罩揉爆胸 | 久久国产精品永久免费网站 | 免费三级网址 | 11 13加污女qq看他下面 | 亚洲 日韩 欧美 另类 蜜桃 | 亚洲国产成人精品无码区99 | 亚洲综合春色另类久久 | www.av色| 精品无码国产AV一区二区三区 | 同桌上课把奶露出来给我玩 | 久久毛片视频 | 蜜桃AV色欲A片精品一区 | 国产人妻精品久久久久久很牛 | 午夜理论在线观看不卡大地影院 | 欧美在线看欧美视频免费 | 久久er99热精品一区二区 | 老熟风间由美AV在线一区二区 | 男女肉大捧进出全过程免费 | 最近中文字幕高清中文字幕MV | 好大太快了快插穿子宫了 | 2022国产精品不卡a | 国产精品无码亚洲网 |