2011-03-21 49 views
2

我無法找到更多關於這個默認參數,我碰到並希望有人能指出一個解釋。Firefox setTimeout(func,ms)發送默認參數給回調

在Firefox(3.6在這種情況下),如果調用下面的代碼:

function test(someVar) { 
    console.log('test ' + someVar); 
} 
setTimeout(test, 0); 

它會記錄一個「隨機」數到控制檯。我知道你可以在Firefox中傳遞參數,如下所示:

setTimeout(test, 0, param1, param2); 

但似乎Firefox自動發送一個值。我認爲它是超過請求的通話時間的毫秒數,但我不能確定。 (EG:now()+ 0ms == now(),但是由於它現在不能調用,它會等待執行隊列並返回那個時間以後的ms數)?如果我將超時值設置爲500ms,它通常會返回0除非我有一個很長的腳本背後。

我也知道Firefox會將超時請求鉗位到10ms,並且放入0將使其默認爲10ms。如果這個值是一個'延遲值'(即:它比我們的要求長126ms)是基於我輸入的值(0)還是鉗制的最小值?


下面的一個答案表明這是計時器句柄。以下代碼反駁了(?):

function test(someVar) { 
    console.log('test ' + someVar); 
} 
console.log('Timer ' + setTimeout(test, 0)); 

這將返回兩個不同的值。


當然,它會在IE瀏覽器,所以我不寫一個期望它的代碼返回undefined,但我很好奇。

(這實際上是一些代碼,我正在上依賴於可選參數調用函數導致一個錯誤。曾在IE瀏覽器,而不是FF)

回答

5

從MDC

壁虎傳遞 回調例程的額外參數,指示 毫秒中的超時「」。

因爲「實際的」延遲也許比setTimeout調用指定的延遲時間越長,「遲到」將是零,如果函數被調用指定的延遲後正好,否則返回非零值。

2

你是對的,它是偏移量。它通常是零(意味着它應該在什麼時候被調用),但是如果JS引擎被備份,它會更高,甚至可能是負數。

參考:https://developer.mozilla.org/en/DOM/window.setTimeout

(見黃色部分)

+0

投票你。感謝您的鏈接,但我打算將Satyajit作爲答覆者,因爲他們是第一位。 (抱歉!) – Andir 2011-03-21 20:57:39