Я пишу небольшой компонент jQuery, который анимируется в ответ на нажатия кнопок, а также должен автоматически запускаться. Мне просто интересно, является ли эта функция рекурсивной или нет, я не могу ее полностью решить.Если функция jQuery вызывает себя в своем обратном вызове завершения, это рекурсивная опасность для стека?
function animate_next_internal() {
$('#sc_thumbnails').animate(
{ top: '-=106' },
500,
function() {
animate_next_internal();
}
);
}
Моя текущая функция сложнее позволяют остановок и стартов, это просто упрощенный пример.
EDIT Он может переполнять стек или нет, в зависимости от того, как события обрабатываются внутренне. Возможности:
animate() directy вызывает выполненный обратный вызов, и в этом случае переполнение неизбежно.
animate() назначает обратный вызов для вызова каким-либо внешним механизмом диспетчеризации, а затем завершается, и в этом случае он никогда не будет переполняться.
+1 Так как ваша настройка вызывает функцию обратного вызова, это не то же самое, что вызвать функцию внутри себя. это не настоящая рекурсия. – Samuel
Привет, спасибо, что нашли время попробовать это. Я думаю, ты прибил его. – NXT
Вы, безусловно, правы, что это работает, и ваш тест, чтобы доказать, что все в порядке. Если вы также хотите знать, _why_ это работает, вам нужно будет понять концепцию ** Queues **, реализованную в jQuery с помощью методов ['.queue()') (http://api.jquery.com/queue /) и ['.dequeue()'] (http://api.jquery.com/dequeue/). Все это объясняется очень хорошо и с примерами в [этом ответе] (http://stackoverflow.com/a/3314877/1062304) на другой вопрос. – bfncs