Слишком много ошибок рекурсии в Jquery - PullRequest
2 голосов
/ 15 июня 2010

Я надеюсь, что кто-то может мне помочь.

У меня есть этот код:

<script>
$(document).ready(function() {
 spectrum();
 function spectrum(){
    $('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000);
    spectrum2();
 }
 function spectrum2(){
    $('#bottom-menu ul li.colored a').animate( { color: '#3D423C' }, 16000);
    spectrum();
 }
});
</script>

он работает, но когда я смотрю на firebug, он говорит, что есть ошибка Too Much Recursion.

Я надеюсь, что кто-то может сказать мне, почему.

Спасибо!

Ответы [ 3 ]

4 голосов
/ 15 июня 2010

Проблема в том, что ваш скрипт никогда не останавливается.

Когда страница загружается, вы указываете ей запустить функцию spectrum().Он запускает эту функцию и затем получает указание запустить функцию spectrum2(), что она и делает.Когда он завершает spectrum2(), вы говорите ему, чтобы он снова запускал spectrum(), а когда он закончил, он должен запускать spectrum2() еще раз ... видите шаблон?Ваш плохой скрипт застрял, выполняя эти две функции снова и снова, навсегда!

Процесс вызова функции (или двух функций, вызывающих друг друга несколько раз) называется recursion , но обычнов конечном итоге рекурсия каким-то образом заканчивается.Ваш никогда не завершается, поэтому FireBug говорит: «Подождите, этот сценарий никогда не закончится, я бы лучше выдал ошибку!»

Вероятно, это не то, чего вы пытаетесь достичь, иисправить, скорее всего, просто.Если бы вы могли попытаться объяснить, чего вы пытаетесь достичь, может, мы поможем вам написать правильный код?

0 голосов
/ 19 июля 2013

используйте setTimeout для удаления вызывающих функций из стека:

function spectrum(){
    $('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000);
    setTimeout(function() {spectrum2();},100);
 }

таким образом, у спектра есть шанс завершиться, пока вы запускаете спектр2.Сделайте то же самое со спектром 2.

0 голосов
/ 15 июня 2010

У вас есть четкая бесконечная рекурсия. specturm () вызывает spectrum2 (), который в свою очередь вызывает spectrum (); у вас нет условия для прекращения. Вам нужно добавить условие для завершения этой рекурсии. Возможно, вы хотите добиться следующего. Если вы дадите нам знать, чего пытаетесь достичь, вы получите решение.

<script>
$(document).ready(function() {
 spectrum();

 function spectrum(toEnd){
    $('#bottom-menu ul li.colored a').animate( { color: '#E7294F' }, 16000, function(){
     if(!toEnd)
        spectrum2(true);
     });
 }
 function spectrum2(toEnd){
    $('#bottom-menu ul li.colored a').animate( { color: '#3D423C' }, 16000, function(){

     if(!toEnd)
        spectrum(true);
    });
 }
});
</script>
...