重复功能执行启动问题

时间:2011-09-21 11:38:56

标签: javascript

我每隔一秒重复执行一次功能,如

setInterval(function(){ /* some code */},1000};

要改变什么,所以功能会立即第一次执行,然后每1秒重复一次,我错过了任何参数?

4 个答案:

答案 0 :(得分:5)

您可以使用自动执行功能:

(function Fos () {

     //do your stuff here

     setTimeout(Fos, 1000);

})();

此函数将调用自身,然后设置超时以在一秒钟内再次运行。

编辑:还有一个说明。在我的例子中,我使用了一个命名函数表达式(我使用名称“Fos”),它允许我们在函数内引用函数本身。其他一些示例使用arguments.callee,它甚至不能在ECMAScript 5 Strict模式下工作,现在通常不是推荐的做法。您可以在SO问题Why was the arguments.callee.caller property deprecated in JavaScript?

中详细了解它

答案 1 :(得分:2)

您可能想要声明该函数,运行它并在此之后设置间隔:

function something() { /* ...  */ } // declare function

something(); // run it now immediately (once)

setInterval(something, 1000); // set an interval to run each second from now on

答案 2 :(得分:2)

没了。你能做的最好的是:

var worker = function() { /* code */ }
worker();
setInterval(worker, 1000)

您可以使用稍微不同的模式:

(function() {
    /*code*/
    setTimeout(arguments.callee, 1000);
})()

请注意,在严格模式下不允许使用arguments.callee,因此您可以执行以下操作:

var worker = function() {
    /*code*/
    setTimeout(worker, 1000);
}
worker();

后两个代码示例将创建一个在执行后1000毫秒调用自身的函数。有关使用setInterval()setTimeout()链接之间的差异(优点/缺点)的详细信息,请参阅this link

答案 3 :(得分:1)

对已经建议的解决方案的另一个解决方案是在其声明中返回匿名函数,并在声明函数后立即调用该函数。

这样您就不必使用其他变量,仍然可以使用setInterval返回的区间ID,这意味着您可以稍后使用clearInterval中止它。

EG。 http://jsfiddle.net/mqchen/NRQBK/

setInterval((function() {
    document.write("Hello "); // stuff your function should do
    return arguments.callee;
})(), 1000);