NEWS
Javascript Warnung
-
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.
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 -
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.
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 -
@rewenode Der springende Punkt ist, dass du das in einer Schleife tust, die aber dummerweise durch die Meldung in deinem Screenshot verdeckt ist.
@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. -
@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.@rewenode Joar, die Warnung kannst du getrost ignorieren. Schätze die wurde noch nicht auf
letaktualisiert.Das eigentliche Problem tritt bei Schleifen mit
varauf (hier hatieinen 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 // 5for (var i = 1; i <= 5; i++) { setTimeout(() => console.log(i), 100); } // gibt aus: // 6 // 6 // 6 // 6 // 6Und genau auf letzteres ist diese Warnung abgezielt, weil das ist nämlich wirklich verwirrend. Ich dachte auch erst, da wird 5 ausgegeben...
-
@rewenode Joar, die Warnung kannst du getrost ignorieren. Schätze die wurde noch nicht auf
letaktualisiert.Das eigentliche Problem tritt bei Schleifen mit
varauf (hier hatieinen 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 // 5for (var i = 1; i <= 5; i++) { setTimeout(() => console.log(i), 100); } // gibt aus: // 6 // 6 // 6 // 6 // 6Und genau auf letzteres ist diese Warnung abgezielt, weil das ist nämlich wirklich verwirrend. Ich dachte auch erst, da wird 5 ausgegeben...
@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 -
@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@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, beiletsch***egal :)
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden