2014-01-06 2 views
1

У меня есть функция Javascript, вызывающая себя для обновления панели уведомлений. Моя функция как:Является ли функция самонастройки в Javascript вредной?

function refreshLoop() { 
     refresh(); 
     setTimeout("refreshLoop();", 10000); 
} 

Мой вопрос заключается в том, что если я буду использовать эту функцию, как это, будет ли какой-либо вред Программирующ error-. Я задаю этот вопрос, потому что вы видите, что функция refreshLoop() никогда не заканчивается.

Должен ли я использовать его так или у вас есть какие-либо другие идеи?

Благодаря

+7

Это не рекурсивным. –

+0

Для этого конкретного случая вы можете использовать 'setInterval()'. – millimoose

+0

Также это не рекурсия. 'setTimeout()' означает, что функция должна вызываться в * контуре событий страницы браузера * через 10 секунд. Чтобы это произошло, текущее событие, которое устанавливает тайм-аут, должно обязательно закончить выполнение. – millimoose

ответ

3

Этой конструкции часто и отлично (особенно, если условный вызов setTimeout делает его трудно использовать setInterval), но это не написано, как вы делали. Не используйте код eval, если вы можете напрямую передать функцию. Используйте:

function refreshLoop() { 
     refresh(); 
     setTimeout(refreshLoop, 10000); 
} 
+0

В коде OP нет ничего плохого (извините ...). Он просто использует eval ... – qwertynl

+0

@qwertynl Использование 'eval' здесь очень плохое. –

+0

Вы никогда не говорите, что ... – qwertynl

-1

Я не вижу ничего плохого с ним, но вы можете потерять Eval «refreshLoop();»

function refreshLoop() { 
    refresh(); 
    setTimeout(refreshLoop, 10000); 
} 
+2

Зачем писать второй идентичный ответ? –

+0

Cuz. ** R.E.P. ** @dystroy – qwertynl

+0

Не было ответа, когда я начал писать свой ответ. В следующий раз я обязательно проверю новое предупреждение. – Banditvibe

0

Вы можете закончить цикл ожидания, удалив тайм-аут, как что:

var timeout; 

function refreshLoop() { 
    refresh(); 
    timeout = setTimeout(refreshLoop, 1000); 
} 

refreshLoop() 

// later on 
clearTimeout(timeout) 
Смежные вопросы