Zum Inhalt springen
aviral gupta

// B1.2 · ca. 30 Min. · Einstieg

Variablen mit let und const

Nach dieser Lektion speichern Sie Werte mit let und const, ändern eine let-Variable und beheben die Fehler, die beim Neuzuweisen einer const, zu frühem Benutzen oder doppeltem Deklarieren entstehen.

Lektion 2 von 5 in B1 Erste Schritte

Danach können Sie

  • Eine Variable mit let deklarieren, neu zuweisen und vorhersagen, was sie enthält
  • Zwischen let und const wählen und den TypeError beim Neuzuweisen einer const lesen
  • Variablen nach den Regeln benennen und Fehler durch zu frühes Benutzen oder doppeltes Deklarieren beheben
  1. Aufwärmen · Aufgabe 1 von 7

    Zum Aufwärmen: Welche Zeile erzeugt eine Variable namens score mit dem Wert 0?

  2. Vorhersagen · Aufgabe 2 von 7

    Sagen Sie es vorher, bevor Sie weiterlesen: Was gibt dieser Code aus?

    let lives = 3;
    lives = lives - 1;
    console.log(lives);
  3. Üben · Aufgabe 3 von 7

    Ergänzen Sie das Schlüsselwort, sodass das Programm läuft und 12 ausgibt.

    ____ count = 10;
    count = count + 2;
    console.log(count);
    count = 10;
  4. Üben · Aufgabe 4 von 7

    Mit welcher Art von Fehler stoppt dieses Programm?

    const price = 4;
    price = 5;
    console.log(price);
  5. Üben · Aufgabe 5 von 7

    Ordnen Sie jedem Programm zu, was sein Ausführen ergibt.

  6. Denksport · Aufgabe 6 von 7

    Knobelaufgabe. Was gibt dieses Programm aus?

    let total = 10;
    console.log(total);
    let total = 20;
    console.log(total);
  7. Anwenden · Aufgabe 7 von 7

    Kleine Aufgabe. Schreiben Sie einen Schrittzähler. Deklarieren Sie ein Tagesziel von 10000 Schritten und einen Schrittstand, der bei 0 beginnt. Addieren Sie drei Spaziergänge mit 2500, 4000 und 3000 Schritten, geben Sie nach jedem den Stand aus und dann, wie viele Schritte bis zum Ziel fehlen. Entscheiden Sie für jede Variable, ob sie const oder let ist.

    Prüfen Sie Ihr Ergebnis anhand dieser Liste

Selbst programmieren

Lesen Sie das ausgearbeitete Beispiel und lösen Sie dann die Übungen. Ihr Code läuft in Ihrem Browser oder auf Ihrem Computer und wird nie hochgeladen.

Ausgearbeitetes Beispiel

Punkte zählen in einem kleinen Spiel

Dieses Programm verfolgt eine Runde eines Spiels. Der Name der Spielerin und die Punkte pro Münze ändern sich nie, sie sind also const. Punktestand und Leben ändern sich im Lauf der Runde, sie sind also let. Führen Sie es aus, versuchen Sie dann, pointsPerCoin neu zuzuweisen, und lesen Sie den Fehler.

main.js

// One round of a game, tracked with const and let.
const player = "Ada";
const pointsPerCoin = 10;
let score = 0;
let lives = 3;
console.log(player, "starts with", score, "points and", lives, "lives");
score = score + 3 * pointsPerCoin;
console.log("After 3 coins:", score);
lives = lives - 1;
console.log("Hit! Lives left:", lives);
score = score + 5 * pointsPerCoin;
console.log("After 5 more coins:", score);
console.log(player, "ends with", score, "points");

Ausführen mit

node main.js

Ausgabe

Ada starts with 0 points and 3 lives
After 3 coins: 30
Hit! Lives left: 2
After 5 more coins: 80
Ada ends with 80 points
  • score wird zweimal neu zugewiesen; jedes Mal benutzt die rechte Seite den aktuellen Wert.
  • Die Zeilen, die score und lives ändern, haben kein let: Die Variablen gibt es schon.
  • pointsPerCoin ist const, pointsPerCoin = 20; würde das Programm also mit einem TypeError stoppen.
  • Die Namen stehen in lowerCamelCase: pointsPerCoin, nicht pointspercoin oder points_per_coin.
Ändern und ausführen

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Übungen

Übung 1 von 2

Ein Einkaufsbudget

Sie haben ein Budget von 50 und kaufen drei Dinge: 12.5, dann 20, dann 7.5. Addieren Sie nach jedem Kauf den Preis zu spent und geben Sie die neue Summe aus, als Spent: 12.5 und so weiter. Geben Sie zum Schluss aus, was vom Budget übrig ist, als Left: 10. Rechnen Sie alles mit den Variablen aus; tippen Sie keine Ergebnisse ein.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    spent = spent + 12.5; addiert den ersten Preis zu dem, was bisher ausgegeben wurde.

  2. Hinweis 2

    Geben Sie nach jedem Kauf aus: console.log("Spent:", spent);

  3. Hinweis 3

    Was übrig ist, ist budget - spent, berechnet in der letzten Zeile.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

const budget = 50;
let spent = 0;
spent = spent + 12.5;
console.log("Spent:", spent);
spent = spent + 20;
console.log("Spent:", spent);
spent = spent + 7.5;
console.log("Spent:", spent);
console.log("Left:", budget - spent);
Auf dem eigenen Computer ausführen

Installieren Sie ECMAScript 2026 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.js

const budget = 50;
let spent = 0;
// Add each price to spent and print it: 12.5, then 20, then 7.5.
// Then print what is left of the budget.

main.test.js

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {runMain} from './learnrun.js';

const lines = async () => (await runMain()).trimEnd().split('\n');

test('gibt vier Zeilen aus', async () => {
  const got = await lines();
  assert.equal(got.length, 4, `das Programm gab ${got.length} Zeile(n) aus, erwartet: 4`);
});

test('gibt nach jedem Kauf die Summe aus', async () => {
  const got = await lines();
  assert.deepEqual(got.slice(0, 3), ['Spent: 12.5', 'Spent: 32.5', 'Spent: 40'], `die ersten drei Zeilen sind ${JSON.stringify(got.slice(0, 3))}`);
});

test('gibt aus, was übrig ist', async () => {
  const got = await lines();
  assert.equal(got[3], 'Left: 10', `die vierte Zeile ist ${JSON.stringify(got[3])}, erwartet: "Left: 10"`);
});

package.json

{
  "type": "module"
}

package.json sagt Node.js, dass die .js-Dateien Module sind; lassen Sie die Datei im Ordner.

Programm ausführen:

node main.js

Prüfungen ausführen (learnrun.js muss im selben Ordner liegen):

node --test
learnrun.js herunterladen

Übung 2 von 2

Den Wetterbericht reparieren

Dieses Programm soll Berlin 12, dann Berlin 14, dann Hamburg 14 ausgeben, stoppt aber mit einem Fehler. Führen Sie es aus, lesen Sie den Fehler, korrigieren Sie die Zeile und führen Sie es erneut aus: Es gibt drei Fehler, jeder von einer anderen Art. Behalten Sie die Reihenfolge der Zeilen bei.

Tab rückt ein, Umschalt+Tab rückt aus. Um den Editor mit der Tastatur zu verlassen, drücken Sie Esc und dann Tab.

Beim ersten Ausführen lädt Ihr Browser den JavaScript-Runner herunter (bis zu 0.1 MB) und speichert ihn im Cache. Ihr Code läuft in der eigenen Engine Ihres Browsers und bleibt auf Ihrem Gerät.

Hinweise
  1. Hinweis 1

    Der erste Fehler ist ein SyntaxError: Ein Name wird zweimal deklariert. Um eine Variable zu ändern, lassen Sie let weg.

  2. Hinweis 2

    Namen unterscheiden Groß- und Kleinschreibung: temperature und Temperature sind verschiedene Namen.

  3. Hinweis 3

    Eine Variable, die später einen neuen Wert bekommt, muss mit let deklariert werden, nicht mit const.

Eine Lösung zeigen

Ein möglicher Lösungsweg. Ihrer kann anders aussehen und trotzdem alle Prüfungen bestehen.

let city = "Berlin";
let temperature = 12;
console.log(city, temperature);
temperature = temperature + 3;
temperature = temperature - 1;
console.log(city, temperature);
city = "Hamburg";
console.log(city, temperature);
Auf dem eigenen Computer ausführen

Installieren Sie ECMAScript 2026 oder neuer. Speichern Sie diese Dateien in einem Ordner, öffnen Sie dort ein Terminal und führen Sie die Befehle unten aus.

main.js

const city = "Berlin";
let temperature = 12;
console.log(city, temperature);
temperature = temperature + 3;
let temperature = temperature - 1;
console.log(city, Temperature);
city = "Hamburg";
console.log(city, temperature);

main.test.js

import {test} from 'node:test';
import assert from 'node:assert/strict';
import {runMain} from './learnrun.js';

test('läuft ohne Fehler', async () => {
  await runMain();
});

test('gibt die drei Berichte aus', async () => {
  const got = (await runMain()).trimEnd().split('\n');
  assert.deepEqual(got, ['Berlin 12', 'Berlin 14', 'Hamburg 14'], `das Programm gab ${JSON.stringify(got)} aus`);
});

package.json

{
  "type": "module"
}

package.json sagt Node.js, dass die .js-Dateien Module sind; lassen Sie die Datei im Ordner.

Programm ausführen:

node main.js

Prüfungen ausführen (learnrun.js muss im selben Ordner liegen):

node --test
learnrun.js herunterladen

Häufige Fehler

Eine const neu zuweisen

const lives = 3;
lives = lives - 1;
console.log(lives);

Was Node.js ausgibt

TypeError: Assignment to constant variable.

Warum, und die Lösung

Eine const behält immer den Wert, mit dem sie deklariert wurde, also stoppt Zeile 2 das Programm. Muss sich der Wert wirklich ändern, deklarieren Sie ihn mit let: let lives = 3;. Soll er sich nicht ändern, liegt der Fehler in Zeile 2: Speichern Sie den neuen Wert unter einem neuen Namen, etwa const livesLeft = lives - 1;.

Eine Variable über ihrer Deklaration benutzen

console.log(total);
let total = 5;

Was Node.js ausgibt

ReferenceError: Cannot access 'total' before initialization

Warum, und die Lösung

Ein Programm läuft von oben nach unten, und ein let oder const lässt sich erst benutzen, wenn seine Zeile gelaufen ist. Die Meldung unterscheidet sich von total is not defined: JavaScript kennt den Namen, aber er hat noch keinen Wert. Setzen Sie die Deklaration über die erste Zeile, die ihn benutzt.

Denselben Namen zweimal deklarieren

let score = 0;
console.log(score);
let score = 10;
console.log(score);

Was Node.js ausgibt

SyntaxError: Identifier 'score' has already been declared

Warum, und die Lösung

let erzeugt eine Variable; es ändert keine. Ein zweites let mit demselben Namen ist ein SyntaxError, die Datei lässt sich also nicht lesen, und nicht einmal Zeile 2 gibt etwas aus. Um score einen neuen Wert zu geben, schreiben Sie score = 10; ohne let.

JavaScript im Browser: die eigene Engine Ihres Browsers in einem abgeschotteten Worker. Syntaxfehler findet acorn 8.18.0, MIT. Lizenz und Quellcode

Abschlussquiz

5 Fragen, ohne Hinweise. Ab 80 % ist die Lektion abgeschlossen.

Erledigen Sie zuerst alle Aufgaben oben, um das Abschlussquiz freizuschalten.

Problem melden

Etwas ist falsch oder unklar? Beschreiben Sie es kurz, dann wird es geprüft und korrigiert.

#

Mindestens 20 Zeichen.

Nur, wenn Sie eine Antwort wünschen.

Kernideen

Eine Variable ist ein Name für einen Wert

let score = 0; deklariert eine Variable namens score und gibt ihr den Wert 0. Später weist score = score + 10; ihr einen neuen Wert zu: JavaScript berechnet zuerst die rechte Seite mit dem alten Wert und speichert dann das Ergebnis, score wird also 10. In dieser Zeile steht kein let, denn die Variable gibt es schon. let score; allein deklariert eine Variable noch ohne Wert; ausgegeben zeigt sie undefined. Eine Variable benutzen Sie über ihren Namen, ohne Anführungszeichen: console.log(score) gibt 10 aus, console.log("score") das Wort score.

const: ein Name, der nie einen neuen Wert bekommt

const rate = 0.19; deklariert eine Konstante. Sie braucht ihren Wert in derselben Zeile: const rate; stoppt mit SyntaxError: Missing initializer in const declaration. Ein späterer neuer Wert stoppt das Programm mit TypeError: Assignment to constant variable. Die Regel von MDN lautet: const, wo Sie können, let, wo Sie müssen. Ein Geburtsjahr ist also const, ein Alter, das sich ändert, let. In älterem Code begegnet Ihnen auch var. Das ist das ursprüngliche Schlüsselwort; MDN nennt seine Gestaltung verwirrend und fehleranfällig, deshalb verwendet dieser Kurs es nicht.

Namen und die Reihenfolge der Zeilen

Ein Name darf Buchstaben, Ziffern, _ und $ enthalten, aber nicht mit einer Ziffer beginnen: const 1st = 2; ist ein SyntaxError. Namen unterscheiden Groß- und Kleinschreibung, score und Score sind also zwei Variablen, und Wörter der Sprache wie for, class oder new können keine Namen sein. Üblich ist lowerCamelCase: firstName, totalPrice. Ein let oder const gibt es erst ab seiner Zeile: Wer es darüber benutzt, bekommt ReferenceError: Cannot access 'total' before initialization. Denselben Namen zweimal zu deklarieren ist ein SyntaxError, und keine Zeile der Datei läuft.

Quellen

Zuletzt geprüft am 30. September 2026