In JavaScript kann ich eine Variable mit var
in einer if
Anweisung, ohne Satzerklärung deklariert:Mit einem if-Anweisung mit einer let/const-Anweisung, ohne Blockanweisung
if (true)
var theAnswer = 42
jedoch zu erklären versuchen, eine Variable let
oder const
ohne Block-Anweisung gibt einen Fehler:
if (true)
let theAnswer = 42
Chrome wirft SyntaxError: Unexpected identifier
, Firefox- SyntaxError: lexical declaration not directly within block
.
if (true)
const theAnswer = 42
Hier Chrome wirft SyntaxError: Unexpected token const
, Firefox- SyntaxError: const declaration not directly within block
.
Was ist der Grund dafür? Gibt es irgendetwas in der Spezifikation, das dieses Verhalten erklären könnte?
Was wäre 'wenn (falsch) sei val = 4; console.log (val); 'drucken? Es wäre nie erklärt worden, also würde es immer eine Ausnahme werfen. – loganfsmyth
@loganfsmyth Ich bin mir nicht sicher, was du sagen willst. Ich würde erwarten, dass dieser Code einen 'ReferenceError', nicht einen' SyntaxError' wirft. Jedoch 'If (falsch) var val = 4; console.log (val) 'wirft keine Fehler; stattdessen protokolliert es "undefiniert" (aufgrund des variablen Hebens). –
@Gothdo gut, bedenken Sie es ein bisschen - 'wenn (cond) lassen Sie a = 1;' kann NIEMALS tun und ist im Grunde tot Code, warum sollten Sie einen ReferenceError? Der JS-Interpreter weiß bereits, dass es nutzlos ist und dass man damit buchstäblich nichts anfangen kann, daher finde ich es durchaus sinnvoll, einen Fehler zu bekommen. Solch eine Aussage kann schließlich nur falsch geschrieben werden. Sicher, Sie können andere Sprachkonstrukte haben, die keine Wirkung haben, aber diese spezifische ist 1. neu, so kann sie strenger durchgesetzt werden 2. trivial auf Gültigkeit zu überprüfen. – vlaz