Ich bin mir nicht sicher, warum, aber ich kann die Variablen let
oder const
nicht aufrufen, wenn ich sie in einer if/else
-Anweisung deklariere.
Wenn ich diesen Code benutze sagt das classes is not defined
.
Aber wenn ich die const
zu var
Klassen ändere ist definiert, aber ich bekomme eine Warnung über classes used outside of binding context
und all var declarations must be at the top of the function scope
Wie könnte ich das beheben?
Sie sollten eine ternäre Zuweisung verwenden:
%Vor% Wie in anderen Kommentaren / Antworten angegeben, sind let
und const
der gesperrte Bereich, weshalb sie in Ihrem Beispiel nicht funktionieren.
Für einen DRYer-Code können Sie das ternäre Zeichenfolgen-Literal auch verschachteln:
%Vor% let
und const
sind auf Blockebene definiert, dh sie können nur innerhalb des Blocks verwendet werden, für den sie in ie definiert wurden. { // if defined in here can only be used here }
In diesem Fall würde ich einfach oberhalb der if / else-Anweisung definieren
%Vor% Verwenden Sie keine if
- else
-Anweisung, sondern einen ternären Ausdruck:
Alternativ können Sie es auch außerhalb des Blocks if
deklarieren, wodurch Sie die Duplizierung ebenfalls entfernen können:
Sehen Sie sich auch chaotische Klassennamen an.
let
und const
sind auf Blockebene definiert, Sie müssen sie also außerhalb des Blocks definieren. var
funktioniert, weil es sich hebt.
Sie können classes
vor dem if
-Block wie @ finalfreq
oder
%Vor%Der ESLint-Standard mag die Operatoren am Anfang der Zeile. Lange Bedingungen sollten auch abstrahiert werden, außer in einer Computer-Zeitschleife.
In diesem speziellen Fall sind die Saiten auch lang, also würde ich diese auch abstrahieren. Das Problem mit Bergis Weg ist, dass die meisten Linters seinen Stil aus Konformitätsgründen verkrüppeln werden.
Auf diese Weise bleibt alles normal und leicht zu lesen, wenn Sie mit den ternären Sprachen vertraut sind, die Sie sein sollten.
%Vor%Tags und Links javascript const reactjs if-statement let