Frage

Hier ist mein Dilemma.

Ich habe diesen Abschnitt des Codes bekommen:

var list_of_numbers = new Array();

function AddToArray(func)
{
    // Add to the *beginning* of the array
    // essentially reversing the order

    list_of_numbers.unshift(func);
}

function DisplayNumber(num)
{
    document.write(num);
}

for(var i=0;i<5;++i)
{
   AddToArray(function() { DisplayNumber(i); });
}

for(var i=0;i<5;++i)
{
   list_of_numbers[i]();
}​

Was geschehen sollte, ist, dass 5 Inline-Funktionen zu dem Array hinzugefügt - für jeden eine Kopie i unter . Dies gilt jedoch nicht geschehen.

Erwartete Ausgabe:

  

43210

Die tatsächliche Ausgang:

  

01234

War es hilfreich?

Lösung

Sie haben zwei getrennte Fragen, sowohl Umfang verwendet.

var list_of_numbers = new Array(); 
function AddToArray(func) 
{ 
    // Add to the *beginning* of the array
    // essentially reversing the order 
    list_of_numbers.unshift(func); 
} 

function DisplayNumber(num) 
{ 
    document.write(num); 
} 
for(var i=0;i<5;++i) 
{ 
    (function(i) 
     { 
         AddToArray(function(){ DisplayNumber(i); });
     })(i); 
} 

for(var j=0;j<5;++j) 
{ 
    list_of_numbers[j](); 
}​
  1. Die anonyme Funktion, die Sie AddToArray vorbei sind auf die Variable i gebunden ist, nicht der aktuelle Wert. Um dies zu beheben, erstellen wir eine neue Funktion, und übergeben Sie in dem aktuellen i.

  2. JavaScript hat Funktionsumfang, so dass, wenn Sie wieder declare i in der zweiten Schleife, sind Sie immer noch die gleiche Variable zu ändern. So haben wir es zu j umbenennen.

Wenn nur das erste Problem, würden Sie 55555 erhalten, da alle Funktionen die gleiche i, an dieser Stelle verwenden würde 5. Da jedoch Sie i für den zweiten Index wiederverwenden, wird i an die Stromschleife Index gesetzt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top