389 Stimmen

Übergabe von Variablen per Referenz in JavaScript

Wie übergebe ich Variablen per Referenz in JavaScript?

Ich habe drei Variablen, mit denen ich mehrere Operationen durchführen möchte, also möchte ich sie in eine for-Schleife setzen und die Operationen mit jeder einzelnen durchführen.

Pseudocode:

myArray = new Array(var1, var2, var3);
for (var x = 0; x < myArray.length; x++){
    // Do stuff to the array
    makePretty(myArray[x]);
}
// Now do stuff to the updated variables

Wie lässt sich dies am besten bewerkstelligen?

2voto

Michael17 Punkte 355

Da wir nicht über Javascript pass by reference Funktionalität, der einzige Weg, dies zu tun ist, um die Funktion den Wert zurück und lassen Sie den Aufrufer zuweisen:

Also

"makePretty(myArray[x]);"

sollte sein

"myArray[x] = makePretty(myArray[x]);"

Dies ist für den Fall, dass Sie eine Zuweisung innerhalb der Funktion benötigen. Wenn nur eine Mutation erforderlich ist, sollte es ausreichen, das Objekt zu übergeben und es zu mutieren.

1voto

Shira Joseph Punkte 11

Abgesehen von der Diskussion über den Passierschein könnten diejenigen, die noch immer nach einer Lösung für die genannte Frage suchen, diese nutzen:

const myArray = new Array(var1, var2, var3);
myArray.forEach(var => var = makePretty(var));

0voto

funct7 Punkte 3075

Ich weiß genau, was Sie meinen. Die gleiche Sache in Swift wird kein Problem sein. Die Quintessenz ist die Verwendung let pas var .

Die Tatsache, dass Primitive als Wert übergeben werden, aber die Tatsache, dass der Wert von var i am Iterationspunkt nicht in die anonyme Funktion kopiert wird, ist, gelinde gesagt, ziemlich überraschend.

for (let i = 0; i < boxArray.length; i++) {
  boxArray[i].onclick = function() { console.log(i) }; // Correctly prints the index
}

0voto

Magnus Punkte 1318

Ich möchte das Problem des Mangels an durch Verweis in JavaScript, wie dieses Beispiel zeigt.

Das Wichtigste dabei ist, dass Sie nicht versuchen, eine durch Verweis . Sie verwenden stattdessen die Rückgabefunktion und ermöglichen die Rückgabe mehrerer Werte. Es besteht also keine Notwendigkeit, Ihre Werte in Arrays oder Objekte einzufügen.

var x = "First";
var y = "Second";
var z = "Third";

log('Before call:',x,y,z);
with (myFunc(x, y, z)) {x = a; y = b; z = c;} // <-- Way to call it
log('After call :',x,y,z);

function myFunc(a, b, c) {
  a = "Changed first parameter";
  b = "Changed second parameter";
  c = "Changed third parameter";
  return {a:a, b:b, c:c}; // <-- Return multiple values
}

function log(txt,p1,p2,p3) {
  document.getElementById('msg').innerHTML += txt + '<br>' + p1 + '<br>' + p2 + '<br>' + p3 + '<br><br>'
}

<div id='msg'></div>

0voto

ouchane.exe Punkte 156

Wenn Sie Variablen per Verweis übergeben wollen, ist es besser, Ihre Argumente in einem Objekt zu übergeben und dann den Wert zu ändern, indem Sie window :

window["varName"] = value;

Beispiel:

// Variables with first values
var x = 1, b = 0, f = 15;

function asByReference (
    argumentHasVars = {},   // Passing variables in object
    newValues = [])         // Pass new values in array
{
    let VarsNames = [];

    // Getting variables names one by one
    for(let name in argumentHasVars)
        VarsNames.push(name);

    // Accessing variables by using window one by one
    for(let i = 0; i < VarsNames.length; i += 1)
        window[VarsNames[i]] = newValues[i]; // Set new value
}

console.log(x, b, f); // Output with first values

asByReference({x, b, f}, [5, 5, 5]); // Passing as by reference

console.log(x, b, f); // Output after changing values

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X