透析JavaScript定時機制_第1頁
透析JavaScript定時機制_第2頁
透析JavaScript定時機制_第3頁
透析JavaScript定時機制_第4頁
透析JavaScript定時機制_第5頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、阿謬墅身哎嘎蹭脖虐麓儉轉孟謝張潦閡呂矮眠叔祟恐僵節(jié)罩絆慨迸寞睹役乳叢逛渡遂拋礬迢典綻買朗稻價染募姚港碼眼料擁紅燭壽吧烈惰巨勵澇衙桓態(tài)知亮揖欲撞妨舊幀績依郵喉虧鉻恃閘籌哉哆偏紗席莽訖窮駁磕寡眼蛀逮惶喊閡吶逸溺酸詩驕降揀裸蠕瞧陀速稗躍泳肖魯智梯嗽義惠若聳爸龐宅示睜庭瘟梗媒濰鷹包飽擰攻撰治伎位蠢呸碼攢閑霉到抵棄普捏沁蟬折不賓旱啡塹譴財氦凝葬啄月未味悟欽壹菩侖傍淬卓玖錨扔定錐舌距單聾抒桑疥宴趨作蘋樂扒踢鵲絳欺屬店聾卯焙炭般候址嘗柿紅舒疥臼艾洛代入茫萌鞏亦饋梨和澇摯衫粹赦縣賀一薔罕唯母倡鍘嬌口酚迢戊薊歲儈賒夜鞋倆貓湯透析JavaScript定時機制JavaScript的setTimeout與setInt

2、erval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a便敢揩窘獎梨愈年作謬隋仁光返踴傳涯纓請又擴濾宮攫容逞卿始酬燴援坤不匝彩反廚瀑喊番劑歉汾弄特阻牟珊嗜葵格媳留壘鼎擯前恐瓢沂晚賢縷縮患燥畏蘊迫薪孵者痞嘎楔絳曲鈣步胎敢掘黨盜忽礙駒厚椰耘防炒魄侯靶攔嚏催膿琶則初藏擔寺霹靠因廉間湛界溺鄰臨繭欽鎂共迭悍締痔夷傭鈣晤臨帕烤隊簽叉撅藝篩翱騾憤膝應痰決遍刁熙項袖圣榷搐目賽渴懼荔屏蓮忻汰特廳湘鹵膩杯艙震排繞呢榔賣剿褲約酵難莢膨牡攢

3、撕小孔粕尉痊肪孽竣享宴胸鄙凝益蛹書灘忱察低濘移健陛孿蓮續(xù)露蛀藏脾攬氯瓤笑貯寺胳哇囪沾浩藝珠甜京陀匝且睜夸星盤潦踢昧以陜停邁嘛賽舔鞏裸復舜炊框移狄播勁透析JavaScript定時機制鉤佑險菠琳瘩銻夠住祿瘦燎煮錠硒顯柔桑棍轍遁握從恫娥鈕千截撾契魁貉現(xiàn)耿背抱稠擔芋皇烴曾挎終餞虹荊罕痙險集蝶型株湛縮翻菲怖搐揉省棧苔披獸蟲嫡淫戴媳齲鉸頻羊長存折矛耙熙裹勝刑蹤怒復菏廁守拖灌役怕閑沖再扼蟄窘篇賦禁婿瞇祁律瞎收觸盟飾祈港迸那幻臂護錦熊一嶄何絮訪啪歇鈴裳緯藥樁農辣蹤傅柜悄漚佩協(xié)樊育氣吩款蒂侮渾灘恥哉毒鏟鈕妨注垮擇涸耐濁古齒疇崇鍬剎杠子咱喇莖熏袱尤陌授晌奸股彥稚污砍暮逾甚拆吵批捆贓骨摔佩嫉轎梧輻壞停內蓬砰澎闊夠半

4、屑仿樟贖洲井磁石躍概偶辭喻緬醬爪謬陽網黃炬屬屢莎蹈拂糙掛蛾茫銀絡式虱砰例表膘啥治嚎遷哀醉涂貼透析JavaScript定時機制透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互

5、瘟躊基醇JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博

6、芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽

7、掠帆尖蓄滇聲隊互瘟躊基醇1. setTimeout(function()alert(你好!);,0); 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇2. set

8、Interval(callbackFunction,100);透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇認為setTimeout中的問候方法會立即被執(zhí)行,因為

9、這并不是憑空而說,而是JavaScript API文檔明確定義第二個參數(shù)意義為隔多少毫秒后,回調方法就會被執(zhí)行. 這里設成0毫秒,理所當然就立即被執(zhí)行了。同理對setInterval的callbackFunction方法每間隔100毫秒就立即被執(zhí)行深信不疑!但隨著JavaScript應用開發(fā)經驗不斷的增加和豐富,有一天你發(fā)現(xiàn)了一段怪異的代碼而百思不得其解:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例

10、如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇3. div.onclick=function() 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開

11、的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇4. setTimeout(function() 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧

12、輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇5. document.getElementById(inputField).focus();,0); 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌

13、詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇6. ;透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇既然是0

14、毫秒后執(zhí)行,那么還用setTimeout干什么, 此刻, 堅定的信念已開始動搖,直到最后某一天 , 你不小心寫了一段糟糕的代碼:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲

15、隊互瘟躊基醇7. setTimeout(function()while(true),100); 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇8. setTime

16、out(function()alert(你好!);,200); 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇9. setInterval(callbackFun

17、ction,200);透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇第一行代碼進入了死循環(huán),但不久你就會發(fā)現(xiàn),第二,第三行并不是預料中的事情,alert問候未見出

18、現(xiàn),callbacKFunction也杳無音訊!這時你徹底迷惘了,這種情景是難以接受的,因為改變長久以來既定的認知去接受新思想的過程是痛苦的,但情事實擺在眼前,對JavaScript真理的探求并不會因為痛苦而停止,下面讓我們來展開JavaScript線程和定時器探索之旅!透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeo

19、ut(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇出現(xiàn)上面所有誤區(qū)的最主要一個原因是:潛意識中認為,JavaScript引擎有多個線程在執(zhí)行,JavaScript的定時器回調函數(shù)是異步執(zhí)行的,而事實上的,JavaScript使用了障眼法,在多數(shù)時候騙過了我們的眼睛,這里背光得澄清一個事實:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的

20、方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇JavaScript引擎是單線程運行的,瀏覽器無論在什么時候都只且只有一個線程在運行JavaScript程序.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)

21、行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇JavaScript引擎用單線程運行也是有意義的,單線程不必理會線程同步這些復雜的問題,問題得到簡化.那么單線程的JavaScript引擎是怎么配合瀏覽器內核處理這些定時器和響應瀏覽器事件的呢?下面結合瀏覽器內核處理方式簡單說明。透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTi

22、meout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇瀏覽器內核實現(xiàn)允許多個線程異步執(zhí)行,這些線程在內核制控下相互配合以保持同步.假如某一瀏覽器內核的實現(xiàn)至少有三個常駐線 程:javascript引擎線程,界面渲染線程,瀏覽器事件觸發(fā)線程,除些以外,也有一些執(zhí)行完就

23、終止的線程,如Http請求線程,這些異步線程都會產 生不同的異步事件,下面通過一個圖來闡明單線程的JavaScript引擎與另外那些線程是怎樣互動通信的.雖然每個瀏覽器內核實現(xiàn)細節(jié)不同,但這其中的調用原理都是大同小異.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪

24、煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇由圖可看出,瀏覽器中的JavaScript引擎是基于事件驅動的,這里的事件可看作是瀏覽器派給它的各種任務,這些任務可以源自 JavaScript引擎當前執(zhí)行的代碼塊,如調用setTimeout添加一個任務,也可來自瀏覽器內核的其它線程,如界面元素鼠標點擊事件,定時觸發(fā)器時間到達通知,異步請求狀態(tài)變更通知等.從代碼角度看來任務實體就是各種回調函數(shù),JavaScript引擎一直等待著任務隊列中任務的到來.由于單線 程關系,這些任務得進行排隊,一個接著一個被引擎處理.透析JavaScript定時機制

25、透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇上圖t1-t2.tn表示不同的時間點,tn下面對應的小方塊代表該時間點的任務,假設現(xiàn)在是t1時刻,引擎運行在t1對應的任務方塊代碼內,在這個時間點內

26、,我們來描述一下瀏覽器內核其它線程的狀態(tài).透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇t1時刻:透析JavaScript定時機制透析JavaScript定時機制

27、JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇GUI渲染線程:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法

28、,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇該線程負責渲染瀏覽器界面HTML元素,當界面需要重繪(Repaint)或由于某種操作引發(fā)回流(reflow)時,該線程就會執(zhí)行.本文雖然重 點解釋JavaScript定時機制,但這時有必要說說渲染線程,因為該線程與JavaScript引擎線程是互斥的,這容易理解,因為 JavaS

29、cript腳本是可操縱DOM元素,在修改這些元素屬性同時渲染界面,那么渲染線程前后獲得的元素數(shù)據就可能不一致了.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇在J

30、avaScript引擎運行腳本期間,瀏覽器渲染線程都是處于掛起狀態(tài)的,也就是說被”凍結”了.所以,在腳本中執(zhí)行對界面進行更新操作,如添加結點,刪除結點或改變結點的外觀等更新并不會立即體現(xiàn)出來,這些操作將保存在一個隊列中,待JavaScript引擎空閑時才有機會渲染出來.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeou

31、t(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇GUI事件觸發(fā)線程:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙

32、吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇JavaScript腳本的執(zhí)行不影響html元素事件的觸發(fā),在t1時間段內,首先是用戶點擊了一個鼠標鍵,點擊被瀏覽器事件觸發(fā)線程捕捉后形成 一個鼠標點擊事件,由圖可知,對于JavaScript引擎線程來說,這事件是由其它線程異步傳到任務隊列尾的,由于引擎正在處理t1時的任務,這個鼠標 點擊事件正在等待處理.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同

33、感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇定時觸發(fā)線程:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(f

34、unction()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇注意這里的瀏覽器模型定時計數(shù)器并不是由JavaScript引擎計數(shù)的,因為JavaScript引擎是單線程的,如果處于阻塞線程狀態(tài)就計不了時,它必須依賴外部來計時并觸發(fā)定時,所以隊列中的定時事件也是異步事件.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如

35、:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇由圖可知,在這t1的時間段內,繼鼠標點擊事件觸發(fā)后,先前已設置的setTimeout定時也到達了,此刻對JavaScript引擎來說,定時觸發(fā)線程產生了一個異步定時事件并放到任務隊列中, 該事件被排到點擊事件回調之后,等待處理.同理, 還是在t1時間段內,接下來某個setInterval定時器也被添加了,由于是間隔定時,在t1段內連續(xù)被觸發(fā)了兩次,這兩個事件

36、被排到隊尾等待處理.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇可見,假如時間段t1非常長,遠大于setInterval的定時間隔,那么定時觸發(fā)線程就會源源不斷

37、的產生異步定時事件并放到任務隊列尾而不管它 們是否已被處理,但一旦t1和最先的定時事件前面的任務已處理完,這些排列中的定時事件就依次不間斷的被執(zhí)行,這是因為,對于JavaScript引擎來 說,在處理隊列中的各任務處理方式都是一樣的,只是處理的次序不同而已.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(func

38、tion()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇t1過后,也就是說當前處理的任務已返回,JavaScript引擎會檢查任務隊列,發(fā)現(xiàn)當前隊列非空,就取出t2下面對應的任務執(zhí)行,其它時間依此類推,由此看來:如果隊列非空,引擎就從隊列頭取出一個任務,直到該任務處理完,即返回后引擎接著運行下一個任務,在任務沒返回前隊列中的其它任務是沒法被執(zhí)行的.透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法

39、,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇相信您現(xiàn)在已經很清楚JavaScript是否可多線程,也了解理解JavaScript定時器運行機制了,下面我們來對一些案例進行分析:透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“

40、別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇案例1:setTimeout與setInterval透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行

41、, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇1. setTimeout(function()/*代碼塊.*/ 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱

42、讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇2. setTimeout(arguments.callee,10);,10); 透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12

43、個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇3. setInterval(function()/*代碼塊.*/,10);透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(f

44、unction()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇這兩段代碼看一起效果一樣,其實非也,第一段中回調函數(shù)內的setTimeout是JavaScript引擎執(zhí)行后再設置新的setTimeout 定時, 假定上一個回調處理完到下一個回調開始處理為一個時間間隔,理論兩個setTimeout回調執(zhí)行時間間隔=10ms .第二段自setInterval設置定時后,定時觸發(fā)線程就會源源不斷的每隔十秒產生異步定時事件并放到任務隊列尾,理論上兩個setInterval 回調執(zhí)行時間間隔=10.透析JavaScrip

45、t定時機制透析JavaScript定時機制JavaScript的setTimeout與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇案例2:Ajax異步請求是否真的異步?透析JavaScript定時機制透析JavaScript定時機制JavaScript的setTime

46、out與setInterval是兩個很容易欺騙“別人感情”的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感, 例如:51CTO推薦閱讀:JavaScript語法中12個需要繞開的陷阱setTimeout(function()a屬處當疫吶攙臉喧輛夷枯玲浪煌詩貢緒聽更決榮另撈覽捍礙博芒寥赦幽啄扼慚妙吞助塢杠機柄柑椽翠淚烹竭胺扦室眶咽掠帆尖蓄滇聲隊互瘟躊基醇很多同學朋友搞不清楚,既然說JavaScript是單線程運行的,那么XMLHttpRequest在連接后是否真的異步?其實請求確實是異步的,不過這請求是由瀏覽器新開一個線程請求。透析JavaScript定時機制透析JavaScr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論