2016-09-26 78 views
1

在下面的代碼中,setInterval不能像您期望的那樣工作,即在每個3s之後調用function greet。它在3s之前第一次和greet爲什麼JS setInterval不會重複調用函數

name = "Superman"; 

function greet(name) { 
    alert("Hello " + name) 
} 

setInterval(greet(name), 3000); 

任何機構都可以告訴我我做錯了什麼。

由於 BT

+0

@Quentin不應重複的** [在setInterval函數傳遞參數](http://stackoverflow.com/questions/457826/pass-parameters-in-setinterval-功能)**? –

+0

@ZakariaAcharki - 這也是一個有效的副本,但我認爲我找到的那個更好。 – Quentin

回答

1

setInterval的第一個參數需要是一個函數。

要調用greet立即並通過其返回值(undefined因爲沒有return語句)至setInterval

如果您想在間隔時間內使用參數調用greet,請創建一個新函數並執行函數函數。

var name = "Superman"; // Added `var` here. Implicit globals are problematic and banned in strict mode. 
 

 
function greet(name) { 
 
    alert("Hello " + name) 
 
} 
 

 
function greetName() { 
 
    greet(name); 
 
} 
 

 
setInterval(greetName, 3000);

+0

您的第一行可以被重新引用> setInterval的第一個參數需要是一個函數**定義**。 這是正確的嗎? –

+0

@bTech - 不是。函數定義是用於創建函數的JavaScript源代碼。這是需要傳遞的代碼的輸出。 – Quentin

+0

我不完全明白。在上面的代碼中,如果你傳遞'greetName'(這只是一個引用),你實際上正在傳遞'function greetName(){greet(name); }定義爲'setInterval'。同樣根據[w3schools.com](http://www.w3schools.com/jsref/met_win_setinterval.asp),> setInterval()方法以指定的時間間隔(以毫秒爲單位)調用函數或評估表達式。實際上'setInterval'完成了它需要引用回調定義的調用(或執行)。請糾正我,如果我錯了(也許有一個例子),因爲我需要了解它。 –

0

試試這個:

name = "Superman"; 

function greet(name) { 
    alert("Hello " + name) 
} 

setInterval(function() { return greet(name) }, 3000); 
1

如果您使用的變量在全球的方式,喜歡你的例子。你不需要在函數中有一個參數。然後,你可能只是這樣做:

name = "Superman"; 
 

 
function greet() { 
 
    alert("Hello " + name) 
 
} 
 

 
setInterval(greet, 3000);

但是,如果你還是希望有一個參數,你可以這樣做:

name = "Superman"; 
 

 
function greet(name) { 
 
    alert("Hello " + name) 
 
} 
 

 
setInterval(function() { 
 
    greet(name); 
 
}, 3000);

-1

你應該在setInterval()內加入匿名功能function(){}給函數調用因爲你向它傳遞參數:

name = "Superman"; 

function greet(name) { 
    alert("Hello " + name) 
} 

setInterval(function() { greet(name) }, 3000); 

或者只是傳遞參數作爲參數在結尾,如:

setInterval(greet, 3000, name); 

希望這有助於。

name = "Superman"; 
 

 
function greet(name) { 
 
    console.log("Hello " + name) 
 
} 
 

 
//setInterval(function() { greet(name) }, 1000); 
 
//Or 
 
setInterval(greet, 1000, name);

相關問題