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

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. JavaScript
  5. Javascript Warnung

NEWS

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    22
    1
    1.1k

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

  • Monatsrückblick – September 2025
    BluefoxB
    Bluefox
    14
    1
    2.4k

Javascript Warnung

Geplant Angeheftet Gesperrt Verschoben JavaScript
6 Beiträge 2 Kommentatoren 743 Aufrufe 2 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.
  • R Offline
    R Offline
    rewenode
    schrieb am zuletzt editiert von rewenode
    #1

    Ich hätte da mal eine Frage an die JS-Profis.
    Ich habe mir da mit tabulator.js eine Tabelle gemacht, wo ich das Format des Gruppenheader dynamisch ändere in Abhängigkeit des Gruppeninhalts.
    Das mache ich über die renderComplete-Callback().
    Funktioniert eigentlich tadellos.
    Ich dabe die Entwicklung in der Online-Sandbox https://jsfiddle.net/21ho4pez/3/ gemacht.
    Dabei ist mir eine Warnung aufgefallen, die zwar nicht stört, aber ich weis auch nicht wie ich das besser machen kann.

    2022-09-30_00-09-20.png

    Die Warnung kommt, weil ich innerhalb einer array.some() eine Variable verwende, die außerhalb des scope definiert ist. Hier das array groups[i].

    Wie löst man denn das denn prinzipiell sauber, wenn man innerhalb einer .some(), .map() etc. auf Variablen zugreifen muss, die nicht in diesem scope definiert wurden?

    P.S. wenn ich das array-element vorab in eine variable packe gibt es die Warnung nicht.

    const group = groups[i];
    const statusOpen = data.some(g => g.ort === group && g.status === 'open');
    

    Weis der Himmel warum das nötig ist.

    Gruß
    Reiner

    AlCalzoneA 1 Antwort Letzte Antwort
    0
    • R rewenode

      Ich hätte da mal eine Frage an die JS-Profis.
      Ich habe mir da mit tabulator.js eine Tabelle gemacht, wo ich das Format des Gruppenheader dynamisch ändere in Abhängigkeit des Gruppeninhalts.
      Das mache ich über die renderComplete-Callback().
      Funktioniert eigentlich tadellos.
      Ich dabe die Entwicklung in der Online-Sandbox https://jsfiddle.net/21ho4pez/3/ gemacht.
      Dabei ist mir eine Warnung aufgefallen, die zwar nicht stört, aber ich weis auch nicht wie ich das besser machen kann.

      2022-09-30_00-09-20.png

      Die Warnung kommt, weil ich innerhalb einer array.some() eine Variable verwende, die außerhalb des scope definiert ist. Hier das array groups[i].

      Wie löst man denn das denn prinzipiell sauber, wenn man innerhalb einer .some(), .map() etc. auf Variablen zugreifen muss, die nicht in diesem scope definiert wurden?

      P.S. wenn ich das array-element vorab in eine variable packe gibt es die Warnung nicht.

      const group = groups[i];
      const statusOpen = data.some(g => g.ort === group && g.status === 'open');
      

      Weis der Himmel warum das nötig ist.

      Gruß
      Reiner

      AlCalzoneA Offline
      AlCalzoneA Offline
      AlCalzone
      Developer
      schrieb am zuletzt editiert von
      #2

      @rewenode Der springende Punkt ist, dass du das in einer Schleife tust, die aber dummerweise durch die Meldung in deinem Screenshot verdeckt ist.

      Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

      R 1 Antwort Letzte Antwort
      0
      • AlCalzoneA AlCalzone

        @rewenode Der springende Punkt ist, dass du das in einer Schleife tust, die aber dummerweise durch die Meldung in deinem Screenshot verdeckt ist.

        R Offline
        R Offline
        rewenode
        schrieb am zuletzt editiert von
        #3

        @alcalzone sagte in Javascript Warnung:

        die aber dummerweise durch die Meldung in deinem Screenshot verdeckt ist

        Na, du kannst dir doch den Originalcode mit einem Click auf den geposteten jsfiddle.net anschauen. Macht ja keinen Sinn, den hier nochmal zu posten;-)
        Das mit der Schleife verstehe ich nicht, da der code ja ohne jegliche Probleme läuft.
        Die Warnung (oder besser der Hinweis) sagt ja nur, dass es verwirrend sein könnte, wenn innerhalb der Funktion auf Variablen mit äußerem Gültigkeitsbereich zugegriffen wird.
        In diesem Fall groups und i.
        Aber das ist ja in JS ausdrücklich kein Problem.
        Dass ich beim Umweg über eine externe Variable für groups[i] keinen Hinweis bekomme, ändert ja nichts daran, dass trotzdem auf die externe Variable zugegriffen wird.
        Ganz kurios ist es, dass jsfiddle sich über Nacht überlegt hat, dass die Syntax wohl doch korrekt ist und somit keinen Hinweis mehr zeigt;-)
        Ich schieb's mal auf eine Eigenwilligkeit der Online-IDE.

        Klar eigentlich keine Problemfrage. Bin halt mit JS immer noch am lernen, da hat mich das verunsichert.
        Wollte mir da keine evtl. problematische Syntax angewöhnen.

        AlCalzoneA 1 Antwort Letzte Antwort
        0
        • R rewenode

          @alcalzone sagte in Javascript Warnung:

          die aber dummerweise durch die Meldung in deinem Screenshot verdeckt ist

          Na, du kannst dir doch den Originalcode mit einem Click auf den geposteten jsfiddle.net anschauen. Macht ja keinen Sinn, den hier nochmal zu posten;-)
          Das mit der Schleife verstehe ich nicht, da der code ja ohne jegliche Probleme läuft.
          Die Warnung (oder besser der Hinweis) sagt ja nur, dass es verwirrend sein könnte, wenn innerhalb der Funktion auf Variablen mit äußerem Gültigkeitsbereich zugegriffen wird.
          In diesem Fall groups und i.
          Aber das ist ja in JS ausdrücklich kein Problem.
          Dass ich beim Umweg über eine externe Variable für groups[i] keinen Hinweis bekomme, ändert ja nichts daran, dass trotzdem auf die externe Variable zugegriffen wird.
          Ganz kurios ist es, dass jsfiddle sich über Nacht überlegt hat, dass die Syntax wohl doch korrekt ist und somit keinen Hinweis mehr zeigt;-)
          Ich schieb's mal auf eine Eigenwilligkeit der Online-IDE.

          Klar eigentlich keine Problemfrage. Bin halt mit JS immer noch am lernen, da hat mich das verunsichert.
          Wollte mir da keine evtl. problematische Syntax angewöhnen.

          AlCalzoneA Offline
          AlCalzoneA Offline
          AlCalzone
          Developer
          schrieb am zuletzt editiert von AlCalzone
          #4

          @rewenode Joar, die Warnung kannst du getrost ignorieren. Schätze die wurde noch nicht auf let aktualisiert.

          Das eigentliche Problem tritt bei Schleifen mit var auf (hier hat i einen anderen Scope), und Callback-Funktionen die nicht sofort ausgeführt werden (der von .some wird es aber!):

          for (let i = 1; i <= 5; i++) {
            setTimeout(() => console.log(i), 100);
          }
          
          // gibt aus:
          // 1
          // 2
          // 3
          // 4
          // 5
          
          for (var i = 1; i <= 5; i++) {
            setTimeout(() => console.log(i), 100);
          }
          
          // gibt aus:
          // 6
          // 6
          // 6
          // 6
          // 6
          

          Und genau auf letzteres ist diese Warnung abgezielt, weil das ist nämlich wirklich verwirrend. Ich dachte auch erst, da wird 5 ausgegeben...

          Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

          R 1 Antwort Letzte Antwort
          0
          • AlCalzoneA AlCalzone

            @rewenode Joar, die Warnung kannst du getrost ignorieren. Schätze die wurde noch nicht auf let aktualisiert.

            Das eigentliche Problem tritt bei Schleifen mit var auf (hier hat i einen anderen Scope), und Callback-Funktionen die nicht sofort ausgeführt werden (der von .some wird es aber!):

            for (let i = 1; i <= 5; i++) {
              setTimeout(() => console.log(i), 100);
            }
            
            // gibt aus:
            // 1
            // 2
            // 3
            // 4
            // 5
            
            for (var i = 1; i <= 5; i++) {
              setTimeout(() => console.log(i), 100);
            }
            
            // gibt aus:
            // 6
            // 6
            // 6
            // 6
            // 6
            

            Und genau auf letzteres ist diese Warnung abgezielt, weil das ist nämlich wirklich verwirrend. Ich dachte auch erst, da wird 5 ausgegeben...

            R Offline
            R Offline
            rewenode
            schrieb am zuletzt editiert von
            #5

            @alcalzone Danke, dass du dir das mal angesehen hast!
            Da bin ich etwas schlauer. Die let/var Problematik war mir zwar bewusst, bin aber nicht auf die Idee gekommen, dass die IDE darauf abzielen könnte.
            Dass die IDE heute nicht mehr meckert, lag allerdings nur daran, dass ich die log-Ausgaben in der Schleife auskommentiert hatte.
            Ist tatsächlich so, wenn ich groups[i] in eine Variable packe, wird nicht gemeckert.
            Verwende ich groups[i] direkt, gibt es den Hinweis.

            Danke nochmal
            Reiner

            AlCalzoneA 1 Antwort Letzte Antwort
            0
            • R rewenode

              @alcalzone Danke, dass du dir das mal angesehen hast!
              Da bin ich etwas schlauer. Die let/var Problematik war mir zwar bewusst, bin aber nicht auf die Idee gekommen, dass die IDE darauf abzielen könnte.
              Dass die IDE heute nicht mehr meckert, lag allerdings nur daran, dass ich die log-Ausgaben in der Schleife auskommentiert hatte.
              Ist tatsächlich so, wenn ich groups[i] in eine Variable packe, wird nicht gemeckert.
              Verwende ich groups[i] direkt, gibt es den Hinweis.

              Danke nochmal
              Reiner

              AlCalzoneA Offline
              AlCalzoneA Offline
              AlCalzone
              Developer
              schrieb am zuletzt editiert von
              #6

              @rewenode sagte in Javascript Warnung:

              wenn ich groups[i] in eine Variable packe, wird nicht gemeckert.

              Ja, weil du dann nicht mehr die loop-Variable zu einem Zeitpunkt referenzierst, der ggf. zu spät ist.
              Wie gesagt, bei let sch***egal :)

              Warum `sudo` böse ist: https://forum.iobroker.net/post/17109

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


              Support us

              ioBroker
              Community Adapters
              Donate

              674

              Online

              32.5k

              Benutzer

              81.6k

              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