公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

對JavaScript調(diào)用堆棧和setTimeout用法的深入研究

admin
2010年3月24日 21:59 本文熱度 8996
[p]javascript中會經(jīng)常用到settimeout來推遲一個函數(shù)的執(zhí)行,如:[/p][color=#000000]settimeout([/color][color=#0000ff]function[/color][color=#000000](){alert([/color][color=#000000]"[/color][color=#000000]hello world[/color][color=#000000]"[/color][color=#000000]);},[/color][color=#000000]1000[/color][color=#000000]);[/color] [br]會在執(zhí)行到這句話后延遲1秒鐘來彈出alert窗口。那么再看這一段: [color=#008080]1[/color] [color=#0000ff]function[/color][color=#000000] a(){[br][/color][color=#008080]2 [/color][color=#000000]settimeout([/color][color=#0000ff]function[/color][color=#000000]() {alert([/color][color=#000000]1[/color][color=#000000])}, [/color][color=#000000]0[/color][color=#000000]);[br][/color][color=#008080]3 [/color][color=#000000]alert([/color][color=#000000]2[/color][color=#000000]);[br][/color][color=#008080]4[/color] [color=#000000]}[br][/color][color=#008080]5[/color] [color=#000000]a();[/color][color=#008080] [/color][color=#008080][/color][color=#000000][/color]
[p]注意這段代碼中的settimeout延遲設(shè)為了0,就是延遲0毫秒,貌似是不做任何延遲立刻執(zhí)行,即1,2。但實際的執(zhí)行結(jié)果確是2,1。為什么?這得從javascript調(diào)用堆棧(call stack)和settimeout的功能說起。[/p]
[p]首先,javascript是單線程的,即同一時間只執(zhí)行一條代碼,所以每一個javascript代碼執(zhí)行塊會“阻塞”其它異步事件的執(zhí)行。其次,和其他的編程語言一樣,javascript中的函數(shù)調(diào)用也是通過堆棧實現(xiàn)的。在執(zhí)行函數(shù)a的時候,a先入棧,如果不給alert(1)加settimeout,那么alert(1)第2個入棧,最后是alert(2)。但現(xiàn)在給alert(1)加上settimeout后,alert(1)就被加入到了一個新的堆棧中等待,并“盡可能快”的執(zhí)行。這個盡可能快就是指在a的堆棧完成后就立刻執(zhí)行,因此實際的執(zhí)行結(jié)果就是先alert(2),再alert(1)。在這里settimeout實際上是讓alert(1)脫離了當(dāng)前函數(shù)調(diào)用堆棧。看下面一個例子:[/p]
[p][/p][color=#000000]<[/color][color=#000000]input name[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]input[/color][color=#000000]"[/color][color=#000000] onkeydown[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]alert(this.value)[/color][color=#000000]"[/color][color=#000000] type[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]text[/color][color=#000000]"[/color][color=#000000] value[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]a[/color][color=#000000]"[/color][color=#000000] [/color][color=#000000]/[/color][color=#000000]>[/color]
[p]這樣一段函數(shù)意圖是每輸入一個字符就把當(dāng)前input里的所有字符都alert出來,但實際效果確是alert出按鍵之前的內(nèi)容。這里,我們就可以利用settimeout(0)來實現(xiàn)。[/p]
[p][/p]
[p][/p][color=#000000]<[/color][color=#000000]input onkeydown[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]var me=this; settimeout(function(){alert(me.value)}, 0)[/color][color=#000000]"[/color][color=#000000] name[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]input[/color][color=#000000]"[/color][color=#000000] type[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]text[/color][color=#000000]"[/color][color=#000000] value[/color][color=#000000]=[/color][color=#000000]"[/color][color=#000000]a[/color][color=#000000]"[/color][color=#000000] [/color][color=#000000]/[/color][color=#000000]>[/color]
[p][/p]
[p][/p]
[p]這樣當(dāng)onkeydown事件觸發(fā)的時候,alert就被放入了下一個調(diào)用堆棧,一旦onkeydown事件觸發(fā)的堆棧關(guān)閉后就開始執(zhí)行。當(dāng)然瀏覽器還有個onkeyup事件也可以實現(xiàn)我們的需求。[/p]
[p]這樣的settimeout用法在實際項目中還是會時常遇到。比如瀏覽器會聰明的等到一個函數(shù)堆棧結(jié)束后才改變dom,如果再這個函數(shù)堆棧中把頁面背景先從白色設(shè)為紅色,再設(shè)回白色,那么瀏覽器會認為dom沒有發(fā)生任何改變而忽略這兩句話,因此我們可以通過settimeout把“設(shè)回白色”函數(shù)加入下一個堆棧,那么就可以確保背景顏色發(fā)生過改變了(雖然速度很快可能無法被察覺)。[/p]
[p]總之,settimeout增加了javascript函數(shù)調(diào)用的靈活性,為函數(shù)執(zhí)行順序的調(diào)度提供極大便利。[/p]

該文章在 2010/3/24 21:59:36 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務(wù)費用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務(wù)都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产成人精品一区二区三区 | 99久久无码一区 | 国产午夜激无码av毛片护士 | 高潮喷水波多野结衣在线观看 | 国产高清在线精品一区二区三区 | 18禁无遮挡羞羞漫画在线播放 | 国产av无码专区亚洲八aⅴ | 成人午夜福利免费无码视频 | 国产不卡视频一区二区三区四区 | 91免费永久 | 91久久精品无码一级毛片 | 国产精品国产三级国产普通话99 | 国产成人精品一区二三区在线观 | a级毛片在线观看 | 国产91最新欧美在线 | 国产国拍亚洲精品午夜不卡嘿嘿 | av三级在线观看免费天堂 | 精品国产日韩一区2区3区 | 国产亚洲一区二区在线 | 国产麻豆91免费观看 | 97人妻天天爽夜夜爽二区 | 国产成人av乱码免费观看入口 | 国产午夜一区二区久久 | 91精品一区二区三区在线播放 | 国产91精品系列在线观看 | 成本人片无码中文字幕免费 | 1024国产中文毛片基地 | 国产91av在线免费观看 | 91精品国产综合久久婷婷香蕉 | 国产三级小视频在线观看 | 91久久香蕉| 91人妻无码精品一区二区夜色 | 国产三级直播在线播放直播 | 国产精品真实灌醉女在线播放 | 高清无码中午字幕 | 96成人午夜福利一区二区 | 国产av无码专区亚洲av毛片费 | 国产二区交换配 | 91精品国产高久久久成人 | 国产福利视频一区二区三区 | 国产一区二区三区免费 |