NEWS
Fehlermeldung : Cannot redeclare block-scoped variable
-
Hallo All,
ich habe mehrere JS-, Blockly- und Node-Red Scripte am laufen, zu JS habe ich eine Anfängerfrage. Folgendes Problem an einem Beispiel dargestellt.Ich habe zwei identische Scripte prog1.js und prog2.js
prg1.js
"use strict";
let a="a";
let b="b";
…..weiterer Codeprg2.js
"use strict";
let a="a";
let b="b";
…..weiterer CodeKlicke ich mit der Maus zwischen diesen beiden Scripten hin und her ist alles normal. Die Scripte können auch mehrere Zeilen lang sein, es passt alles. Klicke ich aber auf ein Script mit Blockly und klicke anschließend auf ein Script mit JS, moniert der Editor auf einmal die Variablen a und b in beiden Programmen mit folgender Fehlermeldung.
Cannot redeclare block-scoped variable 'a'.(2451)
index1.js(2, 5): 'a' was also declared here.Schreibe ich beide Scripte so….
prg1.js
var a="a";
var b="b";prg2.js
var a="a";
var b="b";...tritt der Fehler nicht auf. Die Fehlermeldung mit der let Variante hat auch keinen Einfluss auf irgendwelche Scripts die laufen, es funktioniert alles ohne Probleme.
Ist der Fehler einmal aufgetreten kann man ihn einfach ignorieren oder man setzt diesen Parameter // @ts-nocheck am Anfang des Scripts.
Alternativ kann man auch den Browsertab schließen und dann neu starten. Ist der Browsertab neu gestartet, sind die Fehlermeldungen weg, aber nur solange bis man wieder auf ein Blockly Script klickt, dann taucht der Fehler wieder auf.
let und var, was sagt Tante Google dazu:
Technisch machen alle diese Varianten dasselbe. Es ist also eine Frage des persönlichen Geschmacks und der Ästhetik.
Jetzt meine Anfängerfrage, warum tritt bei der let Variante diese Fehlermeldung auf?.
Danke schon mal im Voraus für eure Antworten,
tschuess peter
-
@sokomoto
Die Frage beantwortet dieser Text:var and let are both used for variable declaration in javascript but the difference between them is that var is function scoped and let is block scoped.
Letztendlich bedeutet das das die Definition der Variablen mit
var
weiter definiert sind als mitlet
. Damit einher geht das die Definition der Variablen übervar
weniger scharf vom Interpreter überprüft wird.Als letztes noch die Aussage das es keinen Einfluss auf irgendwelche Skripte hat: Ich gehe davon aus das es schon Einflüsse gibt, Du diese aber nicht merkst weil du
- die Variablen lokal in jedem Skript neu initialisierst
- die Variablen nicht global skriptübergreifend zu benutzen versuchst.
A.
-
@asgothian sagte in Fehlermeldung : Cannot redeclare block-scoped variable:
@sokomoto
Die Frage beantwortet dieser Text:
*var and let are both used for variable ....Nicht ganz, da der Fehler nur auftritt , sobald man zwischen den Scripten Blockly und JS im Editor umschaltet.
Ich interpretiere das ganze jetzt so, im Iobrocker mit der alten Variante var die Variablen deklarieren, das macht weniger Stress. :-))tschuess peter