


Diskussion darüber, ob Werte in JavaScript per Wert oder durch Referenz_Javascript-Fähigkeiten übergeben werden
Ich bin kürzlich auf eine interessante Frage gestoßen: „Werden Werte in JS als Wert oder als Referenz übergeben?“
Bevor wir dieses Problem analysieren, müssen wir verstehen, was Call-by-Value und was Call-by-Reference ist. In der Informatik wird dieser Teil als Evaluationsstrategie bezeichnet. Es bestimmt, wie beim Aufruf von Funktionen Werte zwischen Variablen und zwischen Aktualparametern und Formalparametern übergeben werden.
Übergabe nach Wert VS. Übergabe nach Referenz
Bei der Referenzübergabe (Call by Reference) erhalten die formalen Parameter der Funktion implizite Referenzen auf die tatsächlichen Parameter und keine Kopien. Dies bedeutet, dass bei einer Änderung der Werte von Funktionsparametern auch die tatsächlichen Parameter geändert werden. Gleichzeitig weisen beide auf den gleichen Wert hin.
Die Übergabe als Referenz erschwert die Verfolgung von Funktionsaufrufen und führt manchmal zu subtilen Fehlern.
Die Wertübergabe erfordert jedes Mal einen Klon, sodass die Leistung bei einigen komplexen Typen geringer ist. Beide Methoden der Wertübergabe haben ihre eigenen Probleme.
Schauen wir uns zunächst ein C-Beispiel an, um den Unterschied zwischen der Wertübergabe und der Referenzübergabe zu verstehen:
{
p = 27; // Wert übergeben – p ist eine Kopie des tatsächlichen Parameters a, nur p wird geändert
*q = 27; // q ist ein Verweis auf b, sowohl q als auch b werden geändert
}
int main()
{
int a = 1;
int b = 1;
Modify(a, &b); // a wird als Wert übergeben, b wird als Referenz übergeben,
// a hat sich nicht geändert, b hat sich geändert
Return(0);
}
a => Wenn p als Wert übergeben wird, wirkt sich die Änderung des Werts des formalen Parameters p nicht auf den tatsächlichen Parameter a aus, der nur eine Kopie von a ist.
b => q wird als Referenz übergeben. Das Ändern des Werts des formalen Parameters q wirkt sich auch auf den Wert des tatsächlichen Parameters b aus.
Entdecken Sie, wie JS-Werte übergeben werden
Die Grundtypen von JS werden als Wert übergeben.
Funktion foo(x) {
x = 2;
}
foo(a);
console.log(a); // Immer noch 1, nicht betroffen von x = 2 Zuweisung
Funktion foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, geändert!
Funktion foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // Immer noch 1, obj wurde nicht auf 100 geändert.
Call-by-Sharing Um genau zu sein, werden Basistypen in JS als Wert übergeben, und Objekttypen werden durch Teilen übergeben (Aufruf durch Teilen, auch Übergeben durch Objekt und Übergeben durch Objektteilen genannt). Es wurde erstmals 1974 von Barbara Liskov in der GLU-Sprache vorgeschlagen. Diese Bewertungsstrategie wird in Python, Java, Ruby, JS und anderen Sprachen verwendet.
Der Kernpunkt dieser Strategie ist: Wenn eine Funktion aufgerufen wird, um Parameter zu übergeben, akzeptiert die Funktion eine Kopie der Objektargumentreferenz (weder eine Kopie des als Wert übergebenen Objekts noch eine als Referenz übergebene implizite Referenz). Der Unterschied zur Referenzübergabe besteht darin, dass die Zuweisung von Funktionsparametern bei der gemeinsamen Übertragung keinen Einfluss auf den Wert des tatsächlichen Parameters hat. Wie im folgenden Beispiel kann der Wert von obj nicht durch Ändern des Werts des formalen Parameters o geändert werden.
var obj = {x : 1};
Funktion foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // Immer noch 1, obj wurde nicht auf 100 geändert.
Obwohl es sich bei der Referenz um eine Kopie handelt, ist das referenzierte Objekt dasselbe. Sie teilen sich dasselbe Objekt, daher wirkt sich das Ändern der Eigenschaftswerte des formalen Parameterobjekts auch auf die Eigenschaftswerte der tatsächlichen Parameter aus.
var obj = {x : 1};
Funktion foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, geändert!
Da das Objekt bei Objekttypen veränderbar ist, wirkt sich die Änderung des Objekts selbst auf die Referenzen und Referenzkopien aus, die das Objekt gemeinsam nutzen. Da alle Basistypen unveränderlich sind, gibt es keinen Unterschied zwischen der Übergabe durch Teilen und der Übergabe nach Wert (Aufruf nach Wert). Daher entsprechen JS-Basistypen sowohl der Übergabe durch Wert als auch der Übergabe durch Teilen.
var a = 1; // 1 ist Zahlentyp, unveränderlich var b = a; b = 6;
Gemäß der Pass-by-Share-Bewertungsstrategie sind a und b zwei verschiedene Referenzen (b ist eine Referenzkopie von a), beziehen sich jedoch auf denselben Wert. Da der Grundtyp Nr. 1 hier unveränderlich ist, gibt es keinen Unterschied zwischen der Übergabe nach Wert und der Übergabe durch Teilen.
Unveränderliche Natur der Grundtypen
Grundtypen sind unveränderlich (unveränderlich), nur Objekte sind veränderlich (veränderlich), zum Beispiel der numerische Wert 100, boolesche Werte wahr, falsch, ändern Sie diese Werte (z. B. ändern Sie 1 in 3, ändern). wahr bis 100) hat keine Bedeutung. Was leichter zu missverstehen ist, ist der String in JS. Manchmal versuchen wir, den Inhalt einer Zeichenfolge zu „ändern“, aber in JS erstellt jede Operation, die scheinbar einen Zeichenfolgenwert „ändert“, tatsächlich einen neuen Zeichenfolgenwert.
var str = "abc";
str[0]; // "a"
str[0] = „d“;
str; // Immer noch „abc“; Zuweisung ist ungültig. Es gibt keine Möglichkeit, den Inhalt der Zeichenfolge
zu ändern
Aber Objekte sind unterschiedlich, Objekte sind veränderlich.
var obj = {x : 1};
obj.x = 100;
var o = obj;
o.x = 1;
obj.x; // 1, geändert
o = wahr;
obj.x; // 1, wird sich aufgrund von o = true nicht ändern
Hier definieren wir die Variable obj, deren Wert Objekt ist, und setzen dann den Wert des Attributs obj.x auf 100. Definieren Sie dann eine weitere Variable o, deren Wert immer noch das Objektobjekt ist. Zu diesem Zeitpunkt verweisen die Werte der beiden Variablen obj und o auf dasselbe Objekt (verweisen gemeinsam auf dasselbe Objekt). Daher wirkt sich eine Änderung des Objektinhalts sowohl auf obj als auch auf o aus. Das Objekt wird jedoch nicht als Referenz übergeben. Der Wert von o wird durch o = true geändert, was keinen Einfluss auf obj hat.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

MantisBT
Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor