2016-09-26 49 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);