2014-02-20 29 views
-3

在我的JavaScript,我有:Javascript SetInterval沒有正確地等待?

$(document).ready(function() 
{ 
    setInterval(test('test alert'), 10000); 
}); 

function test(value) 
{ 
    alert(value); 
} 

簡單,當文檔準備好,就應該建立的setInterval ...這基本上意味着,等待10秒鐘,運行函數,然後重複每10秒。

問題是setInterval的未激活正常。測試功能正在立即被觸發(而不是等待10秒),並且以後不會再次觸發。我在這裏做錯了什麼?

現在,如果我建立了我的setInterval如下,它工作正常......但是爲什麼呢?

setInterval(function() { test('test alert'); }, 10000); 
+0

你的代碼工作請通過'http:// jsfiddle.net/kw3Mm /'我想你使用錯誤的地方你的代碼 – Amit

+0

也不要在間隔中使用警報 – mplungjan

回答

2

那是因爲你傳遞的返回值的調用該函數,而不是函數本身。你想要的是這樣的:

setInterval(test, 10000); 

如果您需要將參數傳遞到測試,你必須將它包裝在另一個函數:

setInterval(function(){test('test alert');}, 10000); 

每當你使用文字後面的括號(如test()test('test alert'),括號是一個信號,JavaScript來調用函數爲了測試自己這一點,嘗試在您的瀏覽器的交互控制檯以下:

console.log('test: ' + test); 
console.log('test(): ' + test()); 

首先會告訴你,該值是功能;第二個會告訴你undefined;這是因爲函數(test)已被調用,並且返回值。

注意,在JavaScript中,函數是一等公民,因此沒有什麼錯與創建自己返回功能的功能:

function test(value) { 
    return function(){ 
     alert(value); 
    } 
} 

如果你這樣做,你的setInterval將努力爲您最初預期它來:

// test('test alert') returns a function 
setInterval(test('test alert'), 10000); 
1

setInterval()期望一個功能eval() - 作爲第一個參數的字符串。在代碼中,你傳遞給它的功能test()

相反的返回值應該是:

setInterval(function() { 
    test('test alert'); 
}, 10000);