Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

  1. ioBroker Community Home
  2. Deutsch
  3. Entwicklung
  4. JS/TS Variablen Scope

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    8.2k

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    1.9k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.3k

JS/TS Variablen Scope

Geplant Angeheftet Gesperrt Verschoben Entwicklung
javascripttypescriptscope
5 Beiträge 3 Kommentatoren 753 Aufrufe 3 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • SternmiereS Offline
    SternmiereS Offline
    Sternmiere
    schrieb am zuletzt editiert von
    #1

    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.

    Do not look upon this world with fear and loathing. Bravely face whatever the gods offer.
    -- Morihei Ueshiba

    1 Antwort Letzte Antwort
    0
    • SternmiereS Offline
      SternmiereS Offline
      Sternmiere
      schrieb am zuletzt editiert von
      #2

      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!

      Do not look upon this world with fear and loathing. Bravely face whatever the gods offer.
      -- Morihei Ueshiba

      S arteckA 2 Antworten Letzte Antwort
      0
      • SternmiereS Sternmiere

        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 Offline
        S Offline
        stan23
        schrieb am zuletzt editiert von
        #3

        @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.

        Viele Grüße
        Marco

        1 Antwort Letzte Antwort
        0
        • SternmiereS Sternmiere

          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!

          arteckA Offline
          arteckA Offline
          arteck
          Developer Most Active
          schrieb am zuletzt editiert von arteck
          #4

          @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

          zigbee hab ich, zwave auch, nuc's genauso und HA auch

          S 1 Antwort Letzte Antwort
          0
          • arteckA 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 Offline
            S Offline
            stan23
            schrieb am zuletzt editiert von
            #5

            @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.

            Viele Grüße
            Marco

            1 Antwort Letzte Antwort
            0
            Antworten
            • In einem neuen Thema antworten
            Anmelden zum Antworten
            • Älteste zuerst
            • Neuste zuerst
            • Meiste Stimmen


            Support us

            ioBroker
            Community Adapters
            Donate

            438

            Online

            32.4k

            Benutzer

            81.4k

            Themen

            1.3m

            Beiträge
            Community
            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
            ioBroker Community 2014-2025
            logo
            • Anmelden

            • Du hast noch kein Konto? Registrieren

            • Anmelden oder registrieren, um zu suchen
            • Erster Beitrag
              Letzter Beitrag
            0
            • Home
            • Aktuell
            • Tags
            • Ungelesen 0
            • Kategorien
            • Unreplied
            • Beliebt
            • GitHub
            • Docu
            • Hilfe