<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      165 隨筆 :: 17 文章 :: 90 評論 :: 0 Trackbacks
    轉(zhuǎn) http://www.52web.com/52article/?view-145.html

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

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

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


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

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

    1. setTimeout(function(){  
    2. input.focus();  
    3. input.select();  
    4. }, 0);  

    按照 JavaScript: The Definitive Guide 5th 的 14.1 所說:

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

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

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



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

    評論

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

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

    主站蜘蛛池模板: 好猛好深好爽好硬免费视频| XXX2高清在线观看免费视频| 免费在线观看的黄色网址| 美女一级毛片免费观看| 亚洲日本一区二区三区在线| 免费人成在线观看69式小视频| 亚洲精品久久无码| 日本亚洲视频在线| 全免费a级毛片免费**视频| 国产精品青草视频免费播放| 亚洲综合区图片小说区| 免费久久精品国产片香蕉| 高清一区二区三区免费视频| 亚洲爆乳AAA无码专区| 亚洲成av人在线视| 日美韩电影免费看| 久久国产色AV免费观看| 特级aaaaaaaaa毛片免费视频| 亚洲白色白色永久观看| 亚洲精品国产精品乱码不卞| 欧洲一级毛片免费| 三年在线观看免费观看完整版中文| 2020国产精品亚洲综合网| 亚洲精品无码MV在线观看 | 久久精品国产影库免费看| 国产午夜亚洲精品| 亚洲a在线视频视频| 亚洲国产成人久久笫一页| 在线看片无码永久免费视频| 国产午夜无码片免费| 国产精品亚洲综合天堂夜夜| 亚洲精品电影在线| 亚洲精品国产字幕久久不卡| 免费一级毛片不卡不收费| 国产精品视频免费一区二区| 6080午夜一级毛片免费看| 最近中文字幕大全免费版在线 | 四虎影在线永久免费四虎地址8848aa| 一级毛片全部免费播放| 国产性生大片免费观看性 | 成人人免费夜夜视频观看|