Feld "Erstellt am" per Script füllen

In absteigender „badness“

  • gar keine Angabe, also app =: globale Variable, implizit dasselbe wie
  • var app =: app ist eine Variable, die überall in der Datei sichtbar und modifizierbar ist. Auch vor der Definition. Ganz schlecht, wenn sich der Wert nicht ändern sollte.
  • let app=: app ist nur im umschließenden Block definiert und kann nur darin verändert werden.
  • const app=: app ist nur im umschließenden Bock definiert und kann nicht modifiziert werden.

Blöcke sind Funktionen, Schleifen und Conditionals (if etc). Was außerhalb einer Funktion, etwa am Anfang der Datei, deklariert wird, ist überall sichtbar. Was in einer Funktion mit let oder const deklariert wird, ist nur innerhalb dieser Funktion sichtbar.

Grundsätzlich sollte man const benutzen, wenn sich der Wert nicht verändern kann. Was sehr oft der Fall ist.

Edit: TL;DR

Nochmal etwas genauer. Früher kannte JavaScript nur globale Variable, es gab weder var noch let oder const. So ähnlich wie Basic (oder AppleScript?). Das war natürlich nicht wirklich zeitgemäß. Also kam zuerst var – keine semantische Verbesserung, aber syntaktischer Zucker. Außerdem konnte man in Verbindung mit "use strict"; erzwingen, dass jede Variable deklariert werden musste.

Dann kam let, das die Sichtbarkeit von Variablen auf Blöcke beschränkt. D.h. in

for (let i = 0; i < 5; i++) {…}
console.log(i);

wirft die zweite Zeile einen Fehler, weil es i nicht mehr gibt. Andererseits gilt für

let i = 2;
for (let i = 0 ; i < 5; i++) {...}

dass das for einen Fehler wirft, weil i schon deklariert ist, und zwar im umschließenden Block. In diesem Fall würde man mit for (i = 0 ; i < 5; i++) {...} den Fehler beim Übersetzen vermeiden, aber vermutlich einen semantischen einbauen, denn am Ende der Schleife hätte i den Wert 5.

Für const gelten dieselben Sichtbarkeitsregeln wie für let. Zusätzlich wenig überraschend: Man kann eine mit const deklarierte Variable nicht ändern. Wobei …
const a = 5; a = 6 mag der Compiler nicht. Aber
const a = [], a[0] = 1 ist kein Problem. Denn man ändert nicht a, sondern nur dessen Inhalt. Oder so. Dasselbe gilt für andere Objekte, aber nicht für Strings.

Und: Innerhalb von Schleifen darf man const-Werte redeklarieren:

record.forEach(r => {
  const t = record.plainText();
}

ist also erlaubt (und erwünscht).

2 Likes