在下面的代码中,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