Ich verstehe, warum var
dieser Name verwendet wird - er ist variabel const
-, er ist eine Konstante, aber welche Bedeutung hat der Name für let
den aktuellen Block? Kümmer dich nicht darum?
javascript
ecmascript-6
let
Vitaly Zdanevich
quelle
quelle
LET
. Möglicherweise gibt es frühere Sprachbeispiele.LET
wird auf Seite 7 des ersten Entwurfs des Handbuchs vom Mai 1964, pdf hier, beschrieben .const
handelt es sich um eine konstante oder unveränderliche (schreibgeschützte) Objektreferenz, bei der das Objekt selbst noch veränderbar ist. Z.B. Nach Erklärung / assignconst foo = ['bar']
,foo.push('bat')
wäre immer noch legal, aberfoo = ['bar', 'bat']
ist es nicht. Aber das ist zu viel Tippen.Antworten:
Let ist eine mathematische Aussage, die von frühen Programmiersprachen wie Scheme und Basic übernommen wurde. Variablen werden als Entitäten auf niedriger Ebene betrachtet, die nicht für höhere Abstraktionsebenen geeignet sind. Daher möchten viele Sprachdesigner ähnliche, aber leistungsfähigere Konzepte wie in Clojure, F #, Scala einführen, wobei
let
dies einen Wert oder eine Variable bedeuten kann, die zugewiesen werden kann. aber nicht geändert , wodurch der Compiler mehr Programmierfehler abfängt und den Code besser optimiert.JavaScript wurde
var
von Anfang an verwendet, daher brauchten sie nur ein anderes Schlüsselwort und wurden nur von Dutzenden anderer Sprachen ausgeliehen, dielet
bereits so weitvar
wie möglich als traditionelles Schlüsselwort verwendet werden, obwohl in JavaScriptlet
stattdessen eine lokale Variable für den Blockbereich erstellt wird.quelle
len('var') === len('let')
, dass Ihre Deklarationen so oder so gut in Ihrem Editor ausgerichtet sind. Ich habe noch nichts gefunden, was darauf hindeutet, dass dies absichtlich war, aber es kann entweder a) optisch ansprechend und lesbarer sein oder b) schrecklich nervig zu debuggen, wenn Sie die beiden mischen (was sowieso eine schlechte Idee zu sein scheint, aber ich ' habe es gesehen).let
wurde traditionell verwendet, um eine Konstante zu beschreiben, dalet C = the speed of light
Javascript beschlossen hat, let zu verwenden, um eine Variable mit nicht standardmäßigem Gültigkeitsbereich zu beschreiben und gleichzeitig ein anderes Schlüsselwort für Konstanten einzuführen.let
das nahe istvar
. Auch Scala verwendet nicht,let
so dass ich nicht sehe, wie es relevant ist.Ich denke, es folgt der mathematischen Tradition. In der Mathematik wird oft gesagt "sei x eine beliebige reelle Zahl" oder so.
quelle
Zusätzlich zu exebook Antwort , die Mathematik Verwendung des Stichwortes lassen kapselt auch gut die Scoping Auswirkungen ,
let
wenn sie in Javascript / ES6 verwendet. Genauso wie der folgende ES6-Code die Zuordnung in Klammern nicht kennt,toPrint
wenn er den Wert von druckt'Hello World'
,let wie in der formalisierten Mathematik verwendet (insbesondere das Schreiben von Beweisen) zeigt an, dass die aktuelle Instanz einer Variablen nur für den Umfang dieser logischen Idee existiert. Im folgenden Beispiel erhält x beim Eingeben der neuen Idee sofort eine neue Identität (normalerweise sind dies Konzepte, die zum Nachweis der Hauptidee erforderlich sind) und kehrt nach Abschluss des Unterbeweises sofort zum alten x zurück. Genau wie beim Codieren wird dies natürlich als etwas verwirrend angesehen und daher normalerweise vermieden, indem ein anderer Name für die andere Variable gewählt wird.
Sei x so und so ...
Beweiszeug
Neue Idee {Sei x etwas anderes ... beweise etwas} Schließe eine neue Idee ab
Beweisen Sie die Hauptidee mit altem x
quelle
let
es überhaupt nicht geht.let
dreht sich alles um Umfang.let
Lässt mich an so etwas denken, das im Kopf des Code-Schreibers vor sich geht: "Ok, nur für diesen Momentlet foo = bar
, aber dann kann es zu seinem ursprünglichen Wert zurückkehren oder aufhören zu sein. Dies ist in genau dargestellt Die Beispiele für Block Scope und Redeclaring Variables in dieser W3Schools-Präsentation vonlet
. Wiederum nicht so tun, als würde ich eine wissenschaftliche Antwort einbringen, sondern diese eher als Gedächtnisstütze teilen, um mich daran zu erinnern, wann ich sie verwenden möchtelet
.toPrint
, die nur innerhalb des Blocks vorhanden ist , und wirft diese Variable dann pflichtbewusst weg, wenn der Block endet. Und beim Verlassen sind wir wieder im äußeren Bereich, wo das InneretoPrint
nicht mehr existiert, alsoconsole.log(toPrint)
bezieht es sich auf das ÄußeretoPrint
. Es ist nicht so, dass irgendetwas ignoriert wird, es ist nur so, dasslet
Variablen endliche Lebensdauern haben, die durch ihren Umfang definiert sind.Es macht genau das, was das
var
mit einem Bereichsunterschied macht. Jetzt kann es den Namen nicht annehmen,var
da dieser bereits vergeben ist.Es sieht also so aus, als hätte es den nächstbesten Namen angenommen, der eine Semantik in einem interessanten englischsprachigen Konstrukt hat.
Auf Englisch heißt es "Lass mein Haustier ein Hund sein"
quelle
A$="HELLO WORLD"
). Zu den beteiligten Interpreten gehörten Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 auf CP / M, Applesoft BASIC und sogar BASCOM, der MS BASIC-Compiler auf CP / M. VAX BASIC hatte LET, benötigte es aber nicht, wie ich mich erinnere. Der Speicher war damals knapp und die 3 oder 4 zusätzlichen Zeichen des Programmtextes pro Anweisung machten einen Unterschied, insbesondere bei "großen" Programmen.Die wahrscheinlichste Möglichkeit ist, dass es die idiomatischste Wahl war. Es ist nicht nur leicht zu sprechen, sondern auch intuitiv zu verstehen. Einige könnten argumentieren, noch mehr als
var
.Aber ich denke, das hat etwas mehr Geschichte.
Aus Wikipedia :
Ich würde gerne glauben, dass dies auch eine Inspiration für das
let
in Javascript war.quelle
LET
in BASIC von 1964 zu sein.let
in JavaScript eingeführt wurde. Nicht ganz falsch, soweit es geht, aber ohne wirkliche Bedeutung. (Und in keiner Weise die Möglichkeit auszuschließen, dass Scotts Verwendung von "let" auch von BASIC inspiriert wurdeLET
.)Let verwendet einen unmittelbareren begrenzten Bereich auf Blockebene, während var normalerweise der Funktionsbereich oder der globale Bereich ist.
Es scheint, dass let höchstwahrscheinlich gewählt wurde, weil es in so vielen anderen Sprachen gefunden wird, um Variablen wie BASIC und viele andere zu definieren.
quelle
Ich denke, dass die Verschuldung von JavaScript gegenüber Scheme hier offensichtlich ist. Das Schema hat nicht nur let, sondern auch let *, let * -Werte, let-Syntax und let-Werte. (Siehe The Scheme Programming Language, 4. Aufl.)
((Die Wahl verleiht der Vorstellung, dass JavaScript Lispy ist, aber - bevor wir uns hinreißen lassen - nicht homoikonisch.))))
quelle
Es könnte auch so etwas wie "Lexical Environment Type or Tied" bedeuten. Es stört mich, dass es einfach "let this be that " wäre. Und lassen Sie rec im Lambda-Kalkül keinen Sinn ergeben.
quelle