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 = 1
das das gleiche ist wie var let = 1
. Wenn ja, sollte nicht let x = 2
übersetzt werden 1 x = 2
und daher ein Fehler sein?
javascript
Erhöht
quelle
quelle
let
Wenn 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).Antworten:
Es deklariert eine Variable, ist aber nicht dasselbe. Der Hauptunterschied besteht darin, dass Sie diese Variable global * deklarieren , indem Sie eine Deklaration wie
var
,let
oder 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
window
Objekt, dies ist jedoch nicht immer der Fall. Beispielsweise verfügt Node.js über ein eigenesglobal
Namespace-Objekt, das auf das aktuelle Modul verweist.Nein
let = 1
überschreibt nicht die native Funktionalität derlet
Deklaration / 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:
var
ist ein reserviertes Schlüsselwort .let
ist 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 nichtlet
als 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.quelle
Rückwärtskompatibilität.
let
ist relativ neu, daher ist es kein reserviertes Schlüsselwort, alte Skripte nicht zu beschädigen, wenn es als Variablenname verwendet wird. Deshalb können Sielet
als Variablenname verwenden und nichtvar
.Nein. Es ist eher gleich
someothername = 1
und erzeugt eine implizite globale Variable, die sehr schlecht ist.quelle