1.setTimeout的第三個及更多的參數chrome
//定時器啓動時候,第三個之後的參數是做爲第一個func()的參數傳進去。 function timeout(ms) { return new Promise((resolve, reject) => { setTimeout(resolve, ms, "我是setTimeout的第三個參數,將做爲setTimeout的第一個參數的參數傳遞進去") }) } timeout(3000).then((value) => { console.log(value)//"我是setTimeout的第三個參數,將做爲setTimeout的第一個參數的參數傳遞進去" }) function sum(x, y) { console.log(x+y) //4 } setTimeout(sum, 1000, 1, 3);
2.setTimeout(function, 0) 發生了什麼
解釋setTimeout(function, 0) 這個經常使用的「奇技淫巧」很簡單,就是爲了將function裏的任務異步執行,0不表明當即執行,而是將任務推到消息隊列的最後,再由主線程的事件循環去調用它執行。HTML5 中規定setTimeout 的最小時間不是0ms,而是4ms
。事實上,setTimeout有一個最小執行時間,當指定的時間小於該時間時,瀏覽器會用最小容許的時間做爲setTimeout的時間間隔,也就是說即便咱們把setTimeout的毫秒數設置爲0,被調用的程序也沒有立刻啓動。這個最小的時間間隔是多少呢?這和瀏覽器及操做系統有關。瀏覽器
1.HTML5標準規定
setTimeout的最短期間隔是4毫秒;
setInterval的最短間隔時間是10毫秒,也就是說,小於10毫秒的時間間隔會被調整到10毫秒
書和MDC2.在John Resig的新書《Javascript忍者的祕密》一書中提到
Browsers all have a 10ms minimum delay on OSX and a(approximately)
15ms delay on Windows. 在蘋果機上的最小時間間隔是10毫秒,
在Windows系統上的最小時間間隔大約是15毫秒。
MDC中關於setTimeout的介紹中也提到,Firefox中定義的最小時間間隔(DOM_MIN_TIMEOUT_VALUE)是10毫秒,HTML5定義的最小時間間隔是4毫秒。app3.大多數電腦顯示器的刷新頻率是60HZ,大概至關於每秒鐘重繪60次。所以,最平滑的動畫效的最佳循環間隔是1000ms/60,約等於16.6ms。
爲了節電,對於那些不處於當前窗口的頁面,瀏覽器會將時間間隔擴大到1000毫秒。
另外,若是筆記本電腦處於電池供電狀態,Chrome和IE9以上的版本,會將時間間隔切換到系統定時器,大約是16.6毫秒。異步
目前,經在firefox和chrome裏的測試,發現firefox識別的最小時間間隔是0,chrome識別的最小時間間隔是1,看一下demo:測試
setTimeout(function() { console.log(2) }, 2) setTimeout(function() { console.log(1) }, 1) setTimeout(function() { console.log(0) }, 0)
chrome:
動畫
firefox:
spa
看下面的事例。
操作系統
1.<script>引用外部js文件時,必須是<script ...></script>標記格式,不要採起省略形式。firefox
2.在引用多個外部js文件時,省略了</script>將影響到該行下一行的腳本文件,即下一行腳本代碼不能被引用。線程