Я сделал этот код:
window.setInterval(function(){ var a = doStuff(); var b = a + 5; }, 60000)
Фактическое содержание анонимной функции, конечно, только для этого небольшого примера, поскольку это не имеет значения. То, что действительно происходит, является набором переменных, создаются в пределах самой функции, потому что я не загрязняю глобальное пространство.
Но поскольку Вы все знаете, doStuff (), функция не будет вызвана до 60 секунд на странице. Я также хотел бы вызвать функцию прямо сейчас, как только страница загружается, и с тех пор каждые 60 секунд также.
Так или иначе возможно вызвать функцию без копии/вставки внутренний код для исправления после setInterval () строка? Как я сказал, я не хочу загрязнять глобальное пространство бесполезными переменными, которые не необходимы вне функции.
Вы можете поместить свою функцию обратного вызова в переменную и заключить все в самозапускающуюся анонимную функцию:
(function () {
var callback = function() {
var a = doStuff();
var b = a + 5;
};
callback();
window.setInterval(callback, 60000);
})();
Никакого загрязнения.
Это возможно и без создания глобальных переменных:
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 .