2017-07-26 1 views
0

Le script doit avoir à imprimer 'Hello', puis 'Good bye', en raison des entrées de l'appel de fonction. Mais imprime seulement une fois. Pourquoi? Qu'est-ce qui ne va pas ici ci-dessous.Récursivité avec la méthode des arguments

PD: Maintenant, cela ne fonctionne pas. Il fait si je commente la ligne d'appel récursion

<html> 
<head> 
</head> 
<body> 
<script type="text/javascript"> 
    function writing(i,first,second) { 
     len=arguments.length; 
     if (i<=len) { 
      current=arguments[i]; 
      c=0; 
      inter=setInterval(function() { 
        if (c>=current.length) { 
         clearInterval(inter); 
        } else { 
         field=document.getElementById('div1'); 
         field.innerHTML+=current[c]; 
         c+=1; 
        } 
       },200); 
     } 
     i<len?writing(i+1,first,second):writing(i=0,first,second);   
    } 
    writing(1,'Hello','Good bye'); 
</script> 
<div id="div1"></div> 
</body> 

+3

Saints manquant pour compléter les déclarations de var', Batman! Si vous omettez le mot-clé 'var' (ou' let' ou 'const'), la variable sera déclarée à la portée globale (' window' dans ce cas) - provoquant toutes sortes de pollution potentielle et de diaphonie. Il est préférable de prendre l'habitude d'utiliser un linter pour vous aider à attraper ce genre de chose. –

+0

Ok. J'ai diminué le problème. Maintenant, il imprime un message aléatoire avec 'Undefined',' Hello' ou 'Goodbye'. Non respect de l'heure setInterval pour exécuter par caractère Pourquoi? – gAbad

Répondre

1

Il y a tellement de problèmes avec le code, tout d'abord était il était boucle infinie (sans fin), la deuxième était la déclaration des variables, et d'autres ...

Ici, j'ai joint l'extrait, s'il vous plaît courir et vérifier, si c'est ce que vous cherchez.

Je dois ajouter setTimeout pour répondre à vos besoins.

var interval_counter = 0; 
 

 
function writing(i, first, second) { 
 
    var len = arguments.length; 
 
    if (i != 0 && i <= len) { 
 
     var current = arguments[i]; 
 
     var c = 0; 
 
     setTimeout(function() { 
 
      var inter = setInterval(function() { 
 
       if (c >= current.length) { 
 
        clearInterval(inter); 
 
       } else { 
 

 
        field = document.getElementById('div1'); 
 
        field.innerHTML += current[c]; 
 
        c += 1; 
 
       } 
 
      }, 200); 
 
     }, 200 * interval_counter); 
 
     interval_counter = interval_counter + current.length; 
 
     i < (len - 1) ? writing(i + 1, first, second) : writing(i = 0, first, second); 
 
    } else { 
 
     return false; 
 
    } 
 

 
} 
 
writing(1, 'Hello', 'Good bye');
<div id="div1"></div>

+0

D'accord. Merci. Je dois vraiment approfondir les fondamentaux de javascript. – gAbad