2017-01-10 4 views
0

nachdem ich unter Codes ausgeführt, warum myArray ist immer noch [2, 3, 4, 5], warum es nicht zu [] geändert wird? JedochFunktion durch Verweis übergeben

var myArray = [2, 3, 4, 5]; 
function doStuff(arr) { 
    arr = []; 
} 

doStuff(myArray); 

, wenn ich unten Schritte tun, hat myArray ändern [2, 3, 4, 5, 6]

var myArray = [2, 3, 4, 5]; 
function doStuff(arr) { 
    arr.push(6); 
} 

doStuff(myArray); 

Ich bin sehr verwirrend darüber.

Antwort

2

arr ist eine lokale Variable in

function doStuff(arr) { 
    arr = []; 
} 

Die Linie arr = []; weist ein völlig neues Objekt zu arr, so dass es nicht mehr Punkte auf den übergebenen Array. Da die lokale Variable arr den Gültigkeitsbereich der Funktion verlässt, hat diese Zuweisung keine Auswirkung. Die nicht lokale Variable myArray im Bereich des Aufrufers wirkt sich nicht unbedingt aus.

Auf der anderen Seite, die zweite Funktion:

function doStuff(arr) { 
    arr.push(6); 
} 

tatsächlich etwas tut, mit dem Array übergeben, auf dem Objekt die push Methode aufrufen, dass arr Namen. Beachten Sie, dass im Hauptteil der Funktion nicht neu definiert wird, so dass sie niemals ihre Identität als Name für das übergebene Array verliert.

+0

Thank you very much. Deine Erklärung macht mich klar !!! – luckydooodle

0

Was Sie getan haben, ist okey, wenn Sie keine Referenzen auf die myArray haben, weil dies tatsächlich ein leeres Array erstellt. Wenn Sie Referenzen auf myArray von einer anderen Variablen irgendwo in Ihrem Code haben, konnten Sie nicht als null gesetzt Sie getan haben. Als Alternative können Sie folgende Methode zum Löschen verwenden. Andernfalls, wenn es nicht wichtig ist, können Sie Referenzen entfernen.

while(myArray.length > 0) { 
 
    myArray.pop(); 
 
}

Verwandte Themen