2017-04-23 5 views
0

Ich lerne immer noch so könnte ich diese wronf Wortlaut (was möglicherweise, warum ich kein Glück gehabt habe, eine Antwort zu finden, indem Sie so weit suchen) oder ich könnte das falsch machen alle zusammen.Zugriff auf Objekt innerhalb einer Funktion erstellt

Grundsätzlich versuche ich eine Funktion zu erstellen, die, wenn sie aufgerufen wird, ein Objekt (das aus anderen Objekten besteht) erstellt. Wenn ich dieses Characters Objekt außerhalb der Funktion erstelle, kann ich darauf wie erwartet zugreifen, aber wenn ich es innerhalb der Funktion mache, kann ich nicht darauf zugreifen. Ich teste das in der in Chrome integrierten Konsole.

Hier ist mein Code.

function q1(ans) {  //Are you male or female? 
    "use strict"; 
    //store all above objects into new object 
    if (ans === "male") { 
     var Characters = { 
      spike: spike, 
      jet: jet, 
      vicious: vicious 
     }; 
    } 
    if (ans === "female") { 
    //store all above objects into new object 
     var Characters = { 
      faye: faye, 
      julia: julia, 
      ed: ed 
     }; 
    } 
    return Characters; 
} 

(Die Objekte spike, jet, vicious (usw.) sind an anderer Stelle definiert und können ohne Problem zugegriffen werden.)

Wenn ich meine Funktion q1("male"); die Konsole rufen scheint, dass die Characters anmelden Objekt wird erstellt, aber wenn ich dann versuche, darauf zuzugreifen, indem Sie einfach Characters eingeben, erhalte ich einen Fehler (ReferenceError: Zeichen ist nicht definiert). Wenn ich dieses Zeichenobjekt außerhalb einer Funktion erstellen und dann versuchen würde, darauf zuzugreifen, wie oben erwähnt, funktioniert das gut. Das führt mich zu der Annahme, dass ich es nicht richtig zurückgebe (oder ich mache etwas völlig anderes falsch). Was fehlt mir hier?

Vielen Dank im Voraus für jede Hilfe.

+1

Wenn Sie dieses 'var Chars = q1 (" männlich ") mögen, wird der Rückgabewert sinnvoll – LGSon

+0

Das hat es getan. Vielen Dank. –

Antwort

2

Dies ist aufgrund des Umfangs. Dies bedeutet, dass das Zeichen nur in der Funktion vorhanden ist, sodass Sie außerhalb der Funktion nicht darauf zugreifen können. Was Sie tun müssen, ist eine neue Variable, die dem Rückgabewert der Funktion entspricht, wenn Sie sie aufrufen. Auf diese Weise können Sie die zurückgegebene Variable außerhalb der Funktion referenzieren und später verwenden.

var male = q1("male") 
+0

Das hat es getan. Vielen Dank für die Erklärung. Lektion gelernt. –

0

Da Sie bereits Zeichen außerhalb des Bereichs von q1 müssen Sie neu zuweisen die Characters Variable durch Rückkehr Charaktere aus dem Verfahren festgelegt haben.

Also die Zeichen neu zuweisen und es sollte das Problem beheben. Noch eine sehr schlechte Art und Weise ist nicht var Characters zu verwenden, anstatt Characters = ... verwenden, aber denken Sie daran, mit globale Variablewird nicht empfohlen und ist eine sehr schlechte Praxis.

+1

Bitte schlagen Sie nicht vor, eine globale Aufgabe zu machen. – Bergi

+0

@Bergi Sie haben Recht, die Erklärung wurde geändert. –

Verwandte Themen