<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    憨厚生

    ----Java's Slave----
    ***Java's Host***

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    轉 http://www.52web.com/52article/?view-145.html

    摘要: 現有的 JavaScript 引擎是單線程處理任務的。它把任務放到隊列中,不會同步去執行,必須在完成一個任務后才開始另外一個任務。

    由 John Resig 的 How JavaScript Timers Work 可以知道,現有的 JavaScript 引擎是單線程處理任務的。它把任務放到隊列中,不會同步去執行,必須在完成一個任務后才開始另外一個任務。

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


    1. input.focus();  
    2. input.select();  

    時, 2 多了一個延遲時間為 0 的 setTimeout 的外圍函數,即:

    1. setTimeout(function(){  
    2. input.focus();  
    3. input.select();  
    4. }, 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!



    posted on 2009-04-08 13:04 二胡 閱讀(317) 評論(2)  編輯  收藏 所屬分類: JS

    評論

    # re: 轉 認識延遲時間為0的setTimeout[未登錄] 2009-04-26 19:39 test
    mousedown改成mouseup
    keypress改成keyup
    不就行了  回復  更多評論
      

    # re: 轉 認識延遲時間為0的setTimeout[未登錄] 2009-04-26 19:40 test
    mousedown改成mouseup
    keypress改成keyup
      回復  更多評論
      

    主站蜘蛛池模板: 亚洲香蕉免费有线视频| 99精品国产成人a∨免费看| 性感美女视频在线观看免费精品 | a级午夜毛片免费一区二区| 国产亚洲福利一区二区免费看| 亚洲小说图区综合在线| 女人18毛片水真多免费播放| 亚洲国产午夜精品理论片| 99在线精品免费视频九九视| 亚洲制服丝袜一区二区三区| 又黄又爽又成人免费视频| 亚洲一日韩欧美中文字幕在线| 夫妻免费无码V看片| 国产成人久久精品亚洲小说| 亚洲第一永久AV网站久久精品男人的天堂AV | 又黄又大的激情视频在线观看免费视频社区在线 | 在线播放免费人成视频网站| 久久亚洲精品无码播放| 久久久久久免费一区二区三区| 亚洲国产精品久久久久婷婷老年| 巨波霸乳在线永久免费视频| 国产成人亚洲合集青青草原精品| 黄色成人网站免费无码av| 精品一区二区三区免费毛片| 亚洲一区精品伊人久久伊人| 国产真人无码作爱视频免费 | 国产乱子影视频上线免费观看| 香蕉97碰碰视频免费| 亚洲乱码一区二区三区在线观看| 久热免费在线视频| 亚洲伊人久久大香线蕉结合| 国产一区二区三区在线免费| 花蝴蝶免费视频在线观看高清版| 亚洲伊人久久精品| 国产亚洲av片在线观看18女人| 美女网站在线观看视频免费的| 亚洲美女视频一区二区三区| 国产成人精品123区免费视频| 中文字幕日本人妻久久久免费 | 怡红院亚洲红怡院在线观看| 亚洲免费观看视频|