Groups | Search | Server Info | Keyboard shortcuts | Login | Register


Groups > de.comp.lang.javascript > #5043

Re: "let" ausserhalb eines Blocks

From Thomas 'PointedEars' Lahn <PointedEars@web.de>
Newsgroups de.comp.lang.javascript
Subject Re: "let" ausserhalb eines Blocks
Date 2019-04-22 22:36 +0200
Organization PointedEars Software (PES)
Message-ID <90af1457-2d5f-557c-610e-61f60447f357@PointedEars.de> (permalink)
References <let-20190422202050@ram.dialup.fu-berlin.de> <4bc5fbc8-993a-9b04-9e21-1c60aec65d1a@PointedEars.de>

Show all headers | View raw


Thomas 'PointedEars' Lahn wrote:
> Kompatibilität oder Transpiler (z. B. Babel <https://babeljs.io/>)
> vorausgesetzt, ist es in produktivem Code immer besser, “let” oder “const”
> statt “var” zu verwenden, denn:
> 
> - der Gültigkeitsbereich einer Variablen wird auf einen lexikalischen
>   Kontext, unabhängig vom Ausführungskontext, begrenzt (z. B. auf Block
>   Anweisungen);
> 
> - Mehrfachdeklarationen in einem lexikalischen Kontext sind
>   definitionsgemäss nicht möglich, Deklarationen mit gleichen Bezeichnern
>   in unterschiedlichen lexikalischen Kontexten aber schon (vermeidet
>   Nebeneffekte);
Wichtig: Die Deklaration bezogen auf einen lexikalischen Kontext hat auch
zur Folge, dass Referenzen auf eine Variable nicht zulässig sind, bevor die
Variable im Quelltext deklariert wurde.  Dies gilt auch, wenn die Referenz
das Argument des typeof-Operators ist:

  /* undefined */
  typeof x;

  var x;

aber:

  /* ReferenceError: x is not defined */
  typeof x;

  let x;

Dies kann man als Nachteil von “const” und “let” gegenüber “var” betrachten,
es führt aber zu weniger fehlerträchtigem Code.  (Es führt auch zu einem
Codestil, den ich schon immer praktiziere und empfohlen habe: man deklariere
die Variablen dort, wo man sie zuerst braucht, und NICHT irgendwo – weder
ganz unten noch ganz oben – im Code.)

IMHO sollte es den Feature-Test, der mit dem typeof-Operator
abwärtskompatibel möglich ist, nicht beeinflussen, da es sich bei Features
um Eigenschaften und nicht um Variablen handelt.  Bestehender Test-Code muss
aber sorgfältig überprüft werden und sollte besser nicht im globalen Kontext
ausgeführt werden (weil der dazugehörige lexikalische Kontext naturgemäss
weniger gut bekannt ist).

<http://es-discourse.com/t/why-typeof-is-no-longer-safe/15>

-- 
PointedEars

Twitter: @PointedEars2
Please do not cc me. / Bitte keine Kopien per E-Mail.

Back to de.comp.lang.javascript | Previous | NextPrevious in thread | Find similar


Thread

Re: "let" ausserhalb eines Blocks Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-04-22 22:22 +0200
  Re: "let" ausserhalb eines Blocks Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2019-04-22 22:36 +0200

csiph-web