NEWS
[gelöst]Funktionen und Variablen-Gültigkeit - ich seh nicht mehr durch
-
Hallo zusammen,
wieder eine neue Herausforderung die ich nicht allein hinbekomme.
Ich sehe grad nicht mehr durch wo man was deklarieren muss, damit die Variable im ganzen Script gelesen und geschrieben werden kann.
Für die "Sehenden" von euch sicher nur ein Klacks, mir brennt jedenfalls die Stirn.
ich habe eine Funktion "function abruf ()" in der erfolgt ein request.get und darunter wieder eine Funktion "function (error, response, body)"
in der inneren Funktion wird "JSON.parse(body)" in eine Variable geschrieben die ich gern in einer anderen Funktion weiter verwenden möchte.
Ich wollte gern den Code in der inneren stückeln und in separate Funktionen auslagern.
Hier mal der Beispielcode:
function abruf () { request.get ({ url: 'https://api.mcs3.miele.com/v1/devices/?language=' + language, headers: { 'Authorization': 'Bearer ' + access_token}, }, function (error, response, body) { if (!error && response.statusCode == 200) { var obj = JSON.parse(body); } else { console.warn('Geräte fehlgeschlagen ==> StatusCode: ' + response.statusCode); } }); } function verarbeitung () { // hier will ich die Variable obj weiter verwenden fabNumber = Object.keys(obj)[0]; }
geht sowas?
Ich habe viel über innere und äußere Funktionen gelesen, über mehrfach verschachtelte Funktionen und Closures, und komme einfach nicht dahinter.
-
Wenn eine Variable außerhalb von Funktionen deklariert wird, ist sie im Skript global, also aus jeder Funktion heraus zugreifbar.
var obj; function verarbeitung() { // hier will ich die Variable obj weiter verwenden var fabNumber = Object.keys(obj)[0]; } function abruf() { ... obj = JSON.parse(body); // obj darf hier nicht deklariert werden ! verarbeitung(); ... }
Anstelle der Verwendung einer globalen Variablen, kann die Variable auch an die aufgerufene Funktion übergeben werden.
function verarbeitung(obj) { // obj ist lokal in dieser Funktion // hier will ich die Variable obj weiter verwenden var fabNumber = Object.keys(obj)[0]; } function abruf() { ... var obj = JSON.parse(body); verarbeitung(obj); ... }
-
paul, das geht doch hier mit dem Teufel zu… es klappt.
Was ich hier alles schon probiert hatte, da hätte ich rein statistisch schon ne funktionierende Lösung finden müssen.
Aber egal, habe dank!
Welcher deiner beiden Vorschläge wäre "Best Practice"?
-
Welcher deiner beiden Vorschläge wäre "Best Practice"? `
In dem Fall mit dem Variablenbezeichner obj (sehr allgemein), würde ich die Variante mit Übergabe an die Funktion bevorzugen.