Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. [gelöst]Funktionen und Variablen-Gültigkeit - ich seh nicht mehr durch

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    [gelöst]Funktionen und Variablen-Gültigkeit - ich seh nicht mehr durch

    This topic has been deleted. Only users with topic management privileges can see it.
    • Lenny.CB
      Lenny.CB Most Active last edited by

      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.

      1 Reply Last reply Reply Quote 0
      • paul53
        paul53 last edited by

        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);
           ...
        }
        
        
        1 Reply Last reply Reply Quote 0
        • Lenny.CB
          Lenny.CB Most Active last edited by

          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"?

          1 Reply Last reply Reply Quote 0
          • paul53
            paul53 last edited by

            @Lenny.CB:

            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.

            1 Reply Last reply Reply Quote 0
            • First post
              Last post

            Support us

            ioBroker
            Community Adapters
            Donate

            802
            Online

            31.8k
            Users

            79.9k
            Topics

            1.3m
            Posts

            2
            4
            262
            Loading More Posts
            • Oldest to Newest
            • Newest to Oldest
            • Most Votes
            Reply
            • Reply as topic
            Log in to reply
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
            The ioBroker Community 2014-2023
            logo