国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網(wǎng)站 > 建站經(jīng)驗 > 正文

淺談Javascr!ipt線程及定時機制

2019-11-02 14:17:39
字體:
供稿:網(wǎng)友

   這篇文章主要介紹了淺談Javascript線程及定時機制的相關(guān)資料,需要的朋友可以參考下

  setTimeout、setInterval的使用

  Javascript api文檔

惡搞圖片大全[www.62-6.com/1/egaotupian]
中定義setTimeout和setInterval第二個參數(shù)意義分別為間隔多少毫秒后回調(diào)函數(shù)被執(zhí)行和每隔多少毫秒回調(diào)函數(shù)被執(zhí)行。但隨著工作經(jīng)驗的積累,我們發(fā)現(xiàn)事實并非如此。

  比如

  ?

1 2 3 4 5 div.onclick=function(){ setTimeout(function(){ document.getElementById('input').focus(); },0); }

  就解釋不通了,立即執(zhí)行就立即執(zhí)行唄,干嘛還要設(shè)置個定時兜個圈子呢。

  又有一天你寫了下面一段代碼

  ?

1 2 setTimeout(function(){while(true){}},100); setTimeout(function(){alert('你好');},200);

  第一行代碼死循環(huán),結(jié)果造成第二行alert始終沒有出現(xiàn),為啥哩?

  單線程or多線程?

  原來,Javascript引擎是單線程運行的,瀏覽器只有一個線程在運行JavaScript程序。因為單線程的設(shè)計,所以免去了復(fù)雜的多線程同步問題。

  當設(shè)置一個定時的時候,瀏覽器會在設(shè)定的時間后將你指定的回調(diào)函數(shù)插入任務(wù)序列,而非立即執(zhí)行。如果設(shè)定定時時間為0,表示立即插入任務(wù)序列,而不是立即執(zhí)行,仍然要等隊列中任務(wù)執(zhí)行完畢,輪到你,你才執(zhí)行。

  所以下面代碼先彈出2,再彈出1

  ?

1 2 3 4 setTimeout(function(){ alert(1); },0); alert(2);

  那么,這又有什么實際用途呢?且看下面示例

  ?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>setTimeout 0</title> </head> <body> 輸入字符,但內(nèi)容卻不能實時顯示<input type="text" onkeydown="show(this.value)"/> <br/> 輸入字符,內(nèi)容能實時顯示<input type="text" onkeydown="var self=this;setTimeout(function(){show(self.value)},0)"/> <div></div> <script> function show(val){ document.getElementsByTagName("div")[0].innerHTML=val; } </script> </body> </html>
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 连城县| 增城市| 齐齐哈尔市| 且末县| 宝应县| 吉林市| 雷州市| 克山县| 五莲县| 汉阴县| 北川| 普兰县| 民和| 珲春市| 鲁甸县| 会宁县| 合山市| 上饶市| 岳普湖县| 灌阳县| 滨海县| 浦北县| 九龙坡区| 隆尧县| 铁力市| 安陆市| 石渠县| 和平区| 乌拉特中旗| 茂名市| 临江市| 遵义市| 内黄县| 利津县| 纳雍县| 乐陵市| 厦门市| 乐陵市| 崇州市| 鹤壁市| 滦平县|