Немедленно вызвать анонимную функцию внутри setInterval - PullRequest
2 голосов
/ 20 декабря 2010

Так что у меня есть таймер, который выглядит так

my_timer = setInterval(function(){
    do_something_amazing();
    do_more.stuff_here();
    var etc_etc = "foo" + bar;
}, 1000);

И я хочу, чтобы он запускался немедленно и каждую секунду после этого. Я попытался добавить () в конец функции, но это вызвало ее запуск только один раз (поскольку она не возвращает саму функцию в setInterval?) Затем я попытался return this;, чтобы он мог вернуть саму функцию, но это тоже не принесло пользы. Это было случайное предположение.

Есть ли способ заставить это работать без создания именованной функции? Спасибо!

Ответы [ 3 ]

5 голосов
/ 20 декабря 2010

Использовать arguments.callee :

my_timer = setInterval((function(){     
    do_something_amazing();     
    do_more.stuff_here();     
    var etc_etc = "foo" + bar;
    return arguments.callee; 
})(), 1000); 
3 голосов
/ 20 декабря 2010

Технически это не создает никаких именованных функций, но я не уверен, почему вы захотите это сделать:

(function(func) {
    func();
    setInterval(func, 1000);
})(function() {
    do_something_amazing();
    do_more.stuff_here();
    var etc_etc = "foo" + bar;
});
2 голосов
/ 20 декабря 2010

Будет ли это работать для вас?

function startItUp()
{
   bla();
   setInterval( bla, 1000);
}

function bla()
{
    do_something_amazing();
    do_more.stuff_here();
    var etc_etc = "foo" + bar;
}

Надеюсь, это поможет,

...