2015-06-23 29 views
1

我不是那麼喜歡JavaScript,我有以下疑問有關setTimeout()方法。setTimeout()JavaScript方法如何工作?

所以到測試腳本我有:

function simpleMessage() { 
    alert("This is just an alert box"); 
} 

// settimeout is in milliseconds: 
setTimeout(simpleMessage, 5000); 

所以,當我執行頁5秒後進行SimpleMessage中()功能,並顯示在警報彈出。

我明白,當我這樣做:

setTimeout(simpleMessage, 5000); 

這意味着SimpleMessage中()功能有定時器的設置後的5秒後要執行,但爲什麼它被用來SimpleMessage中,而不是simpleMessage()用於函數調用?

回答

3

setTimeout的第一個參數是要執行的函數。標識符simpleMessage指的是您想要執行的功能setTimeout,因此這就是您提供的作爲setTimeout的參數的內容。

如果你沒有setTimeout(simpleMessage(), 5000);,你會立即執行simpleMessage然後setTimeout會得到返回值作爲第一個參數。這相當於:

var value = simpleMessage(); 
setTimeout(value, 5000); 

這沒有任何意義;它與setTimeout(simpleMessage(), 5000);相同。

還考慮一個高階函數返回一個函數:

function funcFacotry() { 
    return function() { alert("this is just an alert box."); } 
} 

var simpleMessage = funcFactory(); 
setTimeout(simpleMessage, 5000); 

在這種情況下,這實際上確實是有意義的,因爲funcFactory返回值是實際上是一個函數本身。

5

simpleMessage參考爲函數,而simpleMessage()執行函數。 setTimeout需要函數參考稍後調用。

或許讓事情變得更加明顯,你可以寫你的函數聲明爲

// define my function (but don't execute it) 
var myFunction = function() { 
    alert('SOUND THE ALARMS!'); 
}; 

// start a timer that will execute the given function after the given 
// period of time 
setTimeout(myFunction, 5000); 

setTimeout documentation

1

因爲您需要在5秒之後傳遞要調用的函數的參考setTimeout

此:

setTimeout(simpleMessage(), 5000); 

將在你調用setTimeout函數的同時執行SimpleMessage中的功能。

1

在javascript setTimeout執行的時間設置爲第二個參數指定金額後的功能,而如果你setInterval使用它會在間隔執行,而不考慮是否得到執行與否的功能(這將導致例如,如果您正在使用動畫,則會出現塊狀效應)。

作爲第二個問題的一個變種:如果您使用帶括號的函數,這是一個方法調用,而沒有括號的使用是對特定方法的引用。