Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. JS/TS Variablen Scope

    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

    JS/TS Variablen Scope

    This topic has been deleted. Only users with topic management privileges can see it.
    • Sternmiere
      Sternmiere last edited by

      Moin,
      ich möchte von Anfang an für Ordnung und Lesbarkeit in meinen Skripten sorgen.
      Hier mal ein Beispiel:

      // Skript A
      const FOO_BAR = "javascript.0.foo.bar.";
      log(FOO_BAR);
      

      Das klappt auch prima.

      Jetzt habe ich ein zweites Script, welches auch den Namespace "javascript.0.foo.bar" nutzen will.

      // Skript B
      const FOO_BAR = "javascript.0.foo.bar.";
      log(FOO_BAR);
      

      Hier bekomme ich beim Speichern folgende Fehlermeldung:

      14:38:57.580	error	javascript.0 (3737) script.js.test.foo: TypeScript compilation failed: const FOO_BAR = "javascript.0.foo.bar."; ^ ERROR: Cannot redeclare block-scoped variable 'FOO_BAR'.
      

      Lasse ich im zweiten Script die erste Zeile weg, kommt folgender Fehler:

      14:34:40.899	error	javascript.0 (3737) script.js.test.foo: script.js.test.foo:3
      14:34:40.900	error	javascript.0 (3737) at script.js.test.foo:3:5
      

      Beide Skripte liegen im selben Ordner.
      Wie ist hier denn der Scope für die Skripte? Am liebsten wäre es mir, wenn ich ein Skript habe, in dem nur die Konstanten für die Namespaces definiert sind, die innerhalb eines Ordners genutzt werden.

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

        Ich gebe mir hier mal selbst eine Antwort:
        Basierend auf der Beschreibung zu den Globals in der iobroker.javascript doku klappt das auch mit Variablen.
        Ich habe im Order global eine neue Datei mit folgendem Inhalt angelegt:

        let FOO_BAR = "javascript.0.foo.bar.";
        

        Jetzt kann ich aus meinem Skript heraus wie folgt auf die Variable zugreifen:

        log(FOO_BAR);
        

        Leider klappt das ganze nicht, wenn ich statt let const benutze. Das wäre mir hier eigentlich noch lieber. Sollte ich dazu noch was finden, melde ich mich. Ansonsten falls jemand anders noch weiß, wie das mit const klappt, immer her mit dem Tipp!

        S arteck 2 Replies Last reply Reply Quote 0
        • S
          stan23 @Sternmiere last edited by

          @Sternmiere Bei mir gab es auch das Problem dass ich nicht die gleichen Variablennamen in verschiedenen Skripten benutzen konnte.
          Das ist mit diesem Commit gelöst:
          https://github.com/ioBroker/ioBroker.javascript/commit/9a384be909c5437bfac2cd5d23348bf57f4f8e2e

          Ob die globals wie gewohnt weiterhin funktionieren habe ich nicht getestet, weil ich das nicht für TS benutze.

          0 GermanBluefox committed to ioBroker/ioBroker.javascript
          * (AlCalzone) Allowed async functions whenever a callback is accepted
          * (AlCalzone) Allowed `true` as 2nd parameter in getObject
          * (AlCalzone) Forced TypeScript to treat each script as a separate module
          * (Bluefox) Replaced the Select-ID dialog
          1 Reply Last reply Reply Quote 0
          • arteck
            arteck Developer Most Active @Sternmiere last edited by arteck

            @Sternmiere also wenn du beie scripte unter globals angelegt hast dann geht das nicht da ein global scrippt IMMER vor JEDEM script drangehangen wird und somit hättest du 2 mal die gleiche Variable deklariert.. besonderheit bei global

            hier kannst du aber funktionen die für jedes andere script erreichbar sind plazieren..

            in unterscripten geht das

            S 1 Reply Last reply Reply Quote 0
            • S
              stan23 @arteck last edited by

              @arteck said in JS/TS Variablen Scope:

              in unterscripten geht das

              Aber gleiche Variablenbezeichner gehen innerhalb common erst seit dem genannten Commit bzw. 4.7.0, davor ging es in meinen Tests eben nicht.

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

              Support us

              ioBroker
              Community Adapters
              Donate

              571
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              javascript scope typescript
              3
              5
              678
              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