Вызовите анонимную функцию, определенную в setInterval

Я сделал этот код:

window.setInterval(function(){ var a = doStuff(); var b = a + 5; }, 60000)

Фактическое содержание анонимной функции, конечно, только для этого небольшого примера, поскольку это не имеет значения. То, что действительно происходит, является набором переменных, создаются в пределах самой функции, потому что я не загрязняю глобальное пространство.

Но поскольку Вы все знаете, doStuff (), функция не будет вызвана до 60 секунд на странице. Я также хотел бы вызвать функцию прямо сейчас, как только страница загружается, и с тех пор каждые 60 секунд также.

Так или иначе возможно вызвать функцию без копии/вставки внутренний код для исправления после setInterval () строка? Как я сказал, я не хочу загрязнять глобальное пространство бесполезными переменными, которые не необходимы вне функции.

9
задан Tominator 3 June 2010 в 08:02
поделиться

2 ответа

Вы можете поместить свою функцию обратного вызова в переменную и заключить все в самозапускающуюся анонимную функцию:

(function () {
    var callback = function() { 
        var a = doStuff(); 
        var b = a + 5; 
    };

    callback();

    window.setInterval(callback, 60000);
})();

Никакого загрязнения.

16
ответ дан 4 December 2019 в 10:03
поделиться

Это возможно и без создания глобальных переменных:

setInterval((function fn() {
 console.log('foo'); // Your code goes here
 return fn;
})(), 5000);

Фактически, таким образом вы вообще не создаете никаких переменных.

Однако в Internet Explorer функция fn станет доступной из окружающей области (из-за ошибки). Если вы не хотите, чтобы это произошло, просто оберните все в самозапускающуюся анонимную функцию:

(function() {
 setInterval((function fn() {
  console.log('foo'); // Your code goes here
  return fn;
 })(), 5000);
})();

Благодарим Пола Айриша за , который поделился этим трюком .


Редактировать: Ответ дополнен дополнительной информацией благодаря bobince .

5
ответ дан 4 December 2019 в 10:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: