在下面的代碼中,setInterval
不能像您期望的那樣工作,即在每個3s
之後調用function greet
。它在3s
之前第一次和greet
。爲什麼JS setInterval不會重複調用函數
name = "Superman";
function greet(name) {
alert("Hello " + name)
}
setInterval(greet(name), 3000);
任何機構都可以告訴我我做錯了什麼。
由於 BT
在下面的代碼中,setInterval
不能像您期望的那樣工作,即在每個3s
之後調用function greet
。它在3s
之前第一次和greet
。爲什麼JS setInterval不會重複調用函數
name = "Superman";
function greet(name) {
alert("Hello " + name)
}
setInterval(greet(name), 3000);
任何機構都可以告訴我我做錯了什麼。
由於 BT
的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);
您的第一行可以被重新引用> setInterval的第一個參數需要是一個函數**定義**。 這是正確的嗎? –
@bTech - 不是。函數定義是用於創建函數的JavaScript源代碼。這是需要傳遞的代碼的輸出。 – Quentin
我不完全明白。在上面的代碼中,如果你傳遞'greetName'(這只是一個引用),你實際上正在傳遞'function greetName(){greet(name); }定義爲'setInterval'。同樣根據[w3schools.com](http://www.w3schools.com/jsref/met_win_setinterval.asp),> setInterval()方法以指定的時間間隔(以毫秒爲單位)調用函數或評估表達式。實際上'setInterval'完成了它需要引用回調定義的調用(或執行)。請糾正我,如果我錯了(也許有一個例子),因爲我需要了解它。 –
試試這個:
name = "Superman";
function greet(name) {
alert("Hello " + name)
}
setInterval(function() { return greet(name) }, 3000);
如果您使用的變量在全球的方式,喜歡你的例子。你不需要在函數中有一個參數。然後,你可能只是這樣做:
name = "Superman";
function greet() {
alert("Hello " + name)
}
setInterval(greet, 3000);
但是,如果你還是希望有一個參數,你可以這樣做:
name = "Superman";
function greet(name) {
alert("Hello " + name)
}
setInterval(function() {
greet(name);
}, 3000);
你應該在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);
@Quentin不應重複的** [在setInterval函數傳遞參數](http://stackoverflow.com/questions/457826/pass-parameters-in-setinterval-功能)**? –
@ZakariaAcharki - 這也是一個有效的副本,但我認爲我找到的那個更好。 – Quentin