這篇文章主要介紹了淺談Javascript線程及
setTimeout、setInterval的使用
Javascript api文檔中定義setTimeout和setInterval第二個參數意義分別為間隔多少毫秒后回調函數被執行和每隔多少毫秒回調函數被執行。但隨著工作經驗的積累,我們發現事實并非如此。
比如
?
1 2 3 4 5 div.onclick=function(){ setTimeout(function(){ document.getElementById('input').focus(); },0); }就解釋不通了,立即執行就立即執行唄,干嘛還要設置個定時兜個圈子呢。
又有一天你寫了下面一段代碼
?
1 2 setTimeout(function(){while(true){}},100); setTimeout(function(){alert('你好');},200);第一行代碼死循環,結果造成第二行alert始終沒有出現,為啥哩?
單線程or多線程?
原來,Javascript引擎是單線程運行的,瀏覽器只有一個線程在運行JavaScript程序。因為單線程的設計,所以免去了復雜的多線程同步問題。
當設置一個定時的時候,瀏覽器會在設定的時間后將你指定的回調函數插入任務序列,而非立即執行。如果設定定時時間為0,表示立即插入任務序列,而不是立即執行,仍然要等隊列中任務執行完畢,輪到你,你才執行。
新聞熱點
疑難解答