JavaScript-Objekte als Parameter der Funktion
JavaScript zu verwenden, sagen, ich habe eine Funktion X, und in dieser Funktion ein Objekt namens objectX erstellt. Funktion X gibt objectX. Später in der code-Funktion Z(somevar, anObject) erhält objectX als einer der Parameter.
Nun in Funktion Z, ist objectX und alle seine Eigenschaften bezeichnet als anObject innerhalb der Funktion Z?
Und was passiert, wenn der Z-Funktion gibt anObject? Wird der rest des Codes sehen das Objekt als "objectX" oder "anObject"?
function X() {
...
objectX = {};
...
return objectX;
}
X();
function Z(anything, anObject) {
...
return anObject
}
Z(something, objectX);
Sie wirklich brauchen, um zu erklären, was du redest besser. Verwenden psudo-code oder so etwas. Die Art und Weise haben Sie es beschrieben, die Funktion X wird nie genannt.
code Hinzugefügt.
Dass code, der nicht ausgeführt werden kann. Die
Martijn - sorry, dass ist ein typeo. Ich behoben.
code Hinzugefügt.
Dass code, der nicht ausgeführt werden kann. Die
X
Funktion wird nie aufgerufen: Javascript ist case-sensitive, so x()' is something different than
X()`...Martijn - sorry, dass ist ein typeo. Ich behoben.
InformationsquelleAutor Ben | 2011-02-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Javascript Funktionsumfang. Dies bedeutet, dass jede variable in einer Funktion deklariert wurde, wird nur zugänglich sein, von innerhalb der Funktion.
Wenn Sie möchten, korrekt deklariert die objectX variable mit
var
wie folgt:dann
objectX
wäre nur bekannt alsobjectX
innerhalb derX
Funktion. Anderswo, es wäre bekannt als welcher variable würde Sie es zugewiesen haben. Da in deinem code, die du nicht zuordnen das ErgebnisX()
etwasobjectX
würde nicht von überall zugänglich.Jedoch ist hier eine Javascript mehr schwere design-Fehler: wenn Sie nicht explizit eine variable deklarieren (mit dem
var
- Anweisung oder als Funktions-parameter), diese variable wird automatisch ein globalen variable. Das bedeutet, dass er zugänglich sein wird überall.Weil dies in Ihrem code, können Sie den Zugriff
objectX
überall mit diesem Namen.anObject
, auf der anderen Seite ist richtig angegeben (als parameter), und das bedeutet, dass Ihr Geltungsbereich beschränkt sich auf dieZ
Funktion.Kurz gesagt, die Art, wie dein code geschrieben ist,
objectX
zugänglich ist, überall durch dieobjectX
variable und innerhalb der FunktionZ
Sie verweisen können es sowohl alsobjectX
und alsanObject
.Tun, beachten Sie jedoch, dass Globale Variablen sind eine Schlechte Sache™, da können Sie machen es sehr schwer, herauszufinden, welche variable zugewiesen bekommt durch wen, Wann und warum — wie Sie bemerkt haben.
Während Javascript macht es unmöglich, vollständig zu vermeiden, Sie in der Regel versuchen Sie, den Umfang Ihrer Variablen so klein wie möglich (Bereich=, wo in Ihrem Programm, dass die variable zugegriffen werden kann).
Zu diesem Zweck würde ich empfehlen, refactoring Ihres Codes, wie igorw hat.
InformationsquelleAutor Martijn
anObject
undobjectX
beide verweisen auf den gleichen Platz im Speicher, so dass, nennen Sie es wie Sie wollen, es ist immer das gleiche Objekt.Glück!
+1 für "verweisen, auf dem gleichen Platz im Speicher"
InformationsquelleAutor Gonzalo Larralde
Dies ist vor allem eine Frage des Umfangs.
Dann sind Sie wahrscheinlich tun es falsch. Wenn Sie nicht mit dem Schlüsselwort var wird der var wird global (das ist schlecht) und von überall zugänglich.
Ich sehe, was du meinst. Danke.
+1 "für den var wird global, ohne Verwendung von var"
InformationsquelleAutor igorw
Ich glaube ein Beispiel ist der beste Weg, um zu lehren. Hier ist ein code (klicken Sie hier zu sehen, es in JS Bin):
Wenn gelesen durch die Kommentare, Sie finden die Antworten auf Ihre Fragen. Zunächst werden Sie bemerken, dass in die Z-Funktion, da ich an objectX als zweiten parameter innerhalb der Funktion, es könnte bezeichnet werden, die von anObject. Zweitens werden Sie feststellen, dass Sie einmal außerhalb der Funktion Z, anObject bezieht sich nicht länger auf objectX. Die Kommentare zeigen auch andere Dinge, die wahr sind in JavaScript.
InformationsquelleAutor Clarence Fredericks
Hier ist der link zu jsfiddle
Nehmen wir das folgende Beispiel unten:
Können Sie sehen, obwohl Sie erstellt ein neues Objekt in z-sondern weil Sie referenzieren auf das gleiche Objekt myPerson name-Eigenschaft ebenfalls geändert, nachdem z() aufgerufen wird.
Ja. Ich sehe, was du jetzt sagst. Danke.
wenn Sie einen Blick auf @Clarence Fredericks Beispiel bringt es in wie JavaScript verwendet das 'neue' und das fördert diese Themen, wie JavaScript-Objekte verwendet, um zu tun, OOP etc...sehr gute Sachen
InformationsquelleAutor KJYe.Name