Zuweisen eines Werts "let" in Javascript

8

Ich habe in Chrome devtools herumgespielt und den folgenden Code ausprobiert:

let = 1;
let x = 2;

console.log(let); // 1
console.log(x); // 2

Der obige Code funktioniert nicht, wenn ich "let" durch "var" ersetze.

Ich gehe davon aus, dass let = 1das das gleiche ist wie var let = 1. Wenn ja, sollte nicht let x = 2übersetzt werden 1 x = 2und daher ein Fehler sein?

Erhöht
quelle
1
letWenn es sich um ein Schlüsselwort handelt, sollten Sie keine Variablen benennen (oder versuchen, diese zu benennen). Ich bin überrascht, dass Chrome das sogar zulässt (lol).
Isick

Antworten:

10

Ich gehe davon aus, dass let = 1das das gleiche ist wievar let = 1

Es deklariert eine Variable, ist aber nicht dasselbe. Der Hauptunterschied besteht darin, dass Sie diese Variable global * deklarieren , indem Sie eine Deklaration wie var, letoder weglassen (vorausgesetzt, Sie setzen keine zuvor deklarierte Variable). Dies ist ein impliziter globaler Code - ein berüchtigter Codegeruch .const

* In den meisten Fällen bezieht sich "global" auf das windowObjekt, dies ist jedoch nicht immer der Fall. Beispielsweise verfügt Node.js über ein eigenes globalNamespace-Objekt, das auf das aktuelle Modul verweist.


Wenn ja, sollte nicht let x = 2übersetzt werden 1 x = 2und daher ein Fehler sein?

Nein let = 1überschreibt nicht die native Funktionalität der letDeklaration / des Schlüsselworts. Sie haben lediglich eine globale Variable mit demselben Namen erstellt. ( Vielleicht ist es selbstverständlich, aber tu das nicht! )


Und Sie haben dies nicht speziell gefragt, aber es lohnt sich, darauf einzugehen:

Warum darf ich das let = 1aber nicht var = 1?

varist ein reserviertes Schlüsselwort .

letist ein zukünftig reserviertes Schlüsselwort, was bedeutet, dass es derzeit nur im strengen Modus reserviert ist . Wenn Sie versuchen, Code zu schreiben, der dem Test der Zeit standhält, sollten Sie ihn am besten nicht letals Kennung verwenden. Wie MDN in dem verlinkten Artikel feststellt, würde ich mir vorstellen, dass es früher als später ein reserviertes Wort sein wird.

Tyler Roper
quelle
Tolle Erklärung, vielen Dank! Mir waren verschiedene Arten von Schlüsselwörtern nicht bekannt.
Erhöht
5

Rückwärtskompatibilität. letist relativ neu, daher ist es kein reserviertes Schlüsselwort, alte Skripte nicht zu beschädigen, wenn es als Variablenname verwendet wird. Deshalb können Sie letals Variablenname verwenden und nicht var.

Ich gehe davon aus, dass let = 1 dasselbe ist wie var let = 1.

Nein. Es ist eher gleich someothername = 1und erzeugt eine implizite globale Variable, die sehr schlecht ist.

Jonas Wilms
quelle