Ist JavaScript eine pass-by-reference oder pass-by-value Sprache?

Den primitiven Typen (Number, String, etc.) als Wert übergeben werden, aber Objekte sind unbekannt,, weil Sie kann sowohl passed-by-value (in Fall betrachten wir eine variable, die halten ein Objekt ist in der Tat eine Referenz auf das Objekt) und übergeben durch Referenz (wenn man bedenkt, dass die variable auf das Objekt hält, auf das Objekt selbst).

Obwohl es nicht wirklich wichtig ist am Ende, ich will wissen, was ist der richtige Weg, um die Argumente übergeben Konventionen. Gibt es einen Auszug aus der JavaScript-Spezifikation, die definiert, was sollte die Semantik in Bezug auf diese?

Ich denke, dass Sie versehentlich gespiegelt, Ihre Definitionen der passed-by-value und übergeben-by-reference... "passed-by-value (in Fall betrachten wir eine variable, die halten ein Objekt ist in der Tat eine Referenz auf das Objekt) und übergeben durch Referenz (wenn man bedenkt, dass die variable auf das Objekt hält, auf das Objekt selbst)"
Ja. Unabhängig von der syntax, die in irgendeiner Funktion rufen Sie in einer beliebigen Programmiersprache, pass-by-reference bedeutet, dass die Daten, die im Zusammenhang mit der übergebenen variable wird nicht kopiert, wenn die an die Funktion übergeben und somit alle änderungen, die von der Funktion, um die übergebene variable bleibt im Programm nach dem Aufruf der Funktion beendet. Pass-by-value bedeutet, dass die Daten, die im Zusammenhang mit der variable ist tatsächlich kopiert, wenn die an die Funktion übergeben, und alle änderungen, die durch diese Funktion, um solche Variablen gehen verloren, wenn die variable geht out of scope der Funktion, den Körper, wenn die Funktion zurückgibt.
Ich glaube nicht, dass Object.create können als ordentliche Klon-Technik, D. H. wenn Sie die original-Kopie des Objekts wird es sich auf den Klon, nur die änderungen der Klon nicht auf das ursprüngliche Objekt. Natürlich hat er es nutzt und JavaScript wurde entwickelt, um dieses Konzept (prototypische Vererbung), aber ich denke, es ist irreführend zu nennen Object.create der einzige Mechanismus für ein Objekt Klonen.
Diese alte Frage ist etwas giftig, weil seine stark-von Ihnen positiv bewertet werden Antwort ist falsch. JavaScript ist streng pass-by-value.
Die Terminologie ist leider verwirrend. Die Sache ist die, "pass by value" und "pass by reference" sind Begriffe, die Sie vorher viel mehr modernen Programmiersprache bietet. Die Worte "Wert" und "Referenz" bezieht sich auf konkret, um die parameter in der function call expression. JavaScript immer wertet jeden Ausdruck in einen Aufruf der Funktion parameter-Liste, bevor dem Aufruf der Funktion, so werden die Parameter stets Werte. Die verwirrende Teil ist, dass Verweise auf Objekte sind gängige JavaScript-Werte. Das heißt nicht, dass es ein "pass by reference" Sprache, jedoch.

InformationsquelleAutor Danail Nachev | 2009-02-05

Schreibe einen Kommentar