Ich habe ein Problem, das ich nicht auf den Grund zu bekommen, so würde jede Hilfe sehr geschätzt werden.Javascript Global Variable Scope/Überschreiben auf Splice
- A die Spitze meiner scipt ich einen globalen Wert zu deklarieren ('
_raw
') - (mit jQuery) ich einen Ajax-Aufruf zu machen, die JSON-Array-Daten zurückgibt (Ich habe geprüft, die JSON-Daten richtig)
- ich diese JSON Antwort nehmen und weisen es
_raw
- Wenn ich auf einen Link klicken, wird
_raw
an eine Funktion übergeben, zBfunction myFunction(dataArray)
, genannt mitmyFunction(_raw)
- Innerhalb dieser Funktion, basierend auf einigen Kriterien
dataArray
gespleißt wird (das heißtdataArray.splice(2,1)
) dataArray
wird dann.
z.B.
var _raw;
// AJAX call sets RAW to an array e.g. Apple, Banana, Pear, Pineapple, Coconut, Raspberry
myFunction(dataArray){
var data=dataArray;
data.splice(2, 1);
return data[0];
}
$('a').click(function(){
result = myFunction(_raw);
alert(result);
// First time this is run, returns 'Pear', however, second time, returns 'Coconut'- as if the splice is being performed on _raw as well as myArray/data...
});
- Ich schätze es einige schlechte Code oben ist, ist dies das Problem zu veranschaulichen
Das Problem, das ich habe, ist, dass, soweit ich sehen kann, ist die einzige Zeit _raw
ist set, ist während des AJAX-Aufrufs jedoch, wenn die Funktion myFunction aufgerufen wird, die _raw
übergibt, scheint der Spleiß auch _raw
selbst zu wirken. Warum passiert dies?
Arrays werden als Referenz in Javascript übergeben, so Arrays sind Zeiger, wie Objekte, Funktionen, ect ... Sie können array.slice jedoch ein neues Array zurückgeben. – mpm