不知道的javascript

一.setTimeout

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毫秒
書和MDC

2.在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毫秒。app

3.大多數電腦顯示器的刷新頻率是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:
clipboard.png動畫

firefox:
clipboard.pngspa

看下面的事例。
clipboard.png操作系統

二.script腳本引用

1.<script>引用外部js文件時,必須是<script ...></script>標記格式,不要採起省略形式。firefox

2.在引用多個外部js文件時,省略了</script>將影響到該行下一行的腳本文件,即下一行腳本代碼不能被引用。線程

相關文章
相關標籤/搜索