2017-05-28 4 views
2
<script language="javascript"> 
    // random strings 
    var strings = ["How is it even possible?", "Have you ever heard about this?"]; 
    var WriteLine = function(s) 
    { 
     var end=s.length, sc=s.split(""); 
     for(counter = 0;counter<end;counter++) 
     { 
     setTimeout(function(){document.write(sc[counter]);},20); 
     //         ^^^^^^^^^^^ 
     } 
    } 
    strings.forEach(WriteLine); 
    </script> 

Es gibt mir, dass:SetTimeout Variablen out-of-scope

undefinedundefinedundefinedundefinedundefinedundefinedundefined

Das Problem ist also, dass die Variable sc außerhalb des Gültigkeitsbereichs aufgrund setTimeout Funktion ist, dass ich schon habe versucht zu verwenden this

+0

Es ist nicht außerhalb des Bereichs, es hat nur den falschen Wert, wenn die Zeitüberschreitung auftritt. Und nein, das hat nichts mit "this" zu tun. – Bergi

Antwort

1

Die Antwort auf Ihr Problem ist es, Cl zu verwenden Sie müssen den Kontext "speichern". Sie verwenden einen setTimeout, der Ihre Funktion nach einiger Zeit ausführt und Ihre for-Schleife ist, sagen wir mal, schneller als 20 ms, also wenn Sie Ihren setTimeout ausführen, ist der Zähler schon am length, weshalb Sie undefined

bekommen
// random strings 
var strings = ["How is it even possible?", "Have you ever heard about this?"]; 
var WriteLine = function(s) 
{ 
    var end=s.length, 
     sc=s.split(""); 
    for(counter = 0;counter<end;counter++) 
    { 
    setTimeout((function(c){ 
     document.write(sc[c]); 
    })(counter),20); 
    //         
    } 
} 
strings.forEach(WriteLine); 
+0

Danke für Ihre Hilfe! :) – JustCodeIT