2017-01-01 89 views
-2

在閱讀源代碼,我看到了一個線爲什麼可以使用的setTimeout( 「1」)

console.log(setTimeout("1"))

這個代碼有返回一個隨機數。

我不知道爲什麼。請幫幫我。

+3

的setTimeout返回intervalID ...或許審查[文檔](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout)在返回值上會回答你的問題。 – Gerrit0

回答

3

作爲每MDN

返回timeoutID是數字的,非零值,它鑑別由所述呼叫創建的setTimeout計時器();可以將此值傳遞給Window.clearTimeout()以取消超時。

所以,當你做= setTimeout(),你沒有得到你已經通過的東西的價值,但它是一個系統生成的標識符。

setTimeout在指定的延遲後在事件堆中註冊一個事件。如果沒有提及延遲,則其假定爲0,但注意,setTimeout(notify, 0)notify()不相同。

另外setTimeout需要一個函數作爲第一個參數。當它接收到一個字符串時,它假定你正在將函數調用作爲字符串傳遞,並且編譯器試圖使用eval來評估它。所以你的setTimeout("1")將變成eval("1")這將返回"1",因此你不會得到錯誤。

function notify(){ 
 
    console.log('ta-da!!!'); 
 
} 
 
var a = 10; 
 

 
setTimeout("notify()",0) 
 

 
// sample for eval 
 
console.log(setTimeout("a")) 
 

 
// This should throw error as `b` is not declared 
 
console.log(setTimeout("b"))