为什么JS setInterval不会重复调用函数

时间:2016-09-26 08:29:27

标签: javascript setinterval

在下面的代码中,setInterval无法正常工作,即在function greet之后拨打3s。它在greet之前第一次调用3s

name = "Superman";

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

setInterval(greet(name), 3000);

任何人都可以告诉我我做错了什么。

由于 BT

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

如果以全局方式使用变量,就像您的示例一样。您不需要在函数中有参数。然后你可以这样做:



name = "Superman";

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

setInterval(greet, 3000);




但是,如果你仍然想要一个参数,你可以这样做:



name = "Superman";

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

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




答案 2 :(得分:0)

试试这个:

name = "Superman";

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

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

答案 3 :(得分:-1)

您应该在function(){}内的函数调用中添加匿名函数setInterval(),因为您将参数传递给它:

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);