wake-up-neo.com

Warum wurde in JavaScript der Name "let" für Variablendeklarationen für Blockbereiche gewählt?

Ich verstehe, warum var diesen Namen annimmt - es ist variabel, const - es ist eine Konstante, aber was ist die Bedeutung hinter dem Namen für let, der sich auf den aktuellen Block bezieht? Kümmer dich nicht darum?

253

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 wünschen viele Sprachdesigner ähnliche, jedoch leistungsfähigere Konzepte wie Clojure, F #, Scala, wobei let einen Wert oder eine Variable bedeuten kann zugewiesen, aber nicht geändert werden , wodurch der Compiler mehr Programmierfehler fangen und den Code besser optimieren kann. JavaScript hatte var von Anfang an, also brauchten sie nur ein anderes Schlüsselwort und wurden nur von Dutzenden anderer Sprachen entliehen, die let bereits als traditionelles Schlüsselwort so nahe wie möglich an var verwenden, obwohl let in JavaScript stattdessen lokale Variablen des Blockbereichs erstellt. 

303
exebook

Ich denke, es folgt der mathematischen Tradition. In der Mathematik wird oft gesagt: "Sei x eine beliebige reelle Zahl" oder so.

62
Tigran Saluev

Zusätzlich zu exebooks Antwort kapselt die mathematische Verwendung des Schlüsselworts let die Gültigkeitsbereiche von let, wenn sie in Javascript/ES6 verwendet werden. So wie der folgende ES6-Code die Zuweisung in toPrint in geschweiften Klammern ignoriert und den Wert von 'Hello World' ausgibt: 

let toPrint = 'Hello World.';
{
    let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'

let, wie es in der formalisierten Mathematik (insbesondere das Schreiben von Beweisen) verwendet wird, zeigt an, dass die aktuelle Instanz einer Variablen nur für den Umfang dieser logischen Idee existiert. Im folgenden Beispiel erhält x unmittelbar nach Eingabe der neuen Idee eine neue Identität (normalerweise sind dies Konzepte, die zum Nachweis der Hauptidee erforderlich sind) und kehrt beim Abschluß des Teilbeweises sofort zum alten x zurück. Natürlich wird dies ebenso wie beim Codieren als etwas verwirrend angesehen und daher normalerweise vermieden, indem für die andere Variable ein anderer Name gewählt wird.

Sei x so und so ...

Beweiszeug

Neue Idee {X soll etwas anderes sein ... etwas beweisen} Neue Idee schließen

Hauptidee mit altem x nachweisen

51
Evan White

Es macht genau das, was die var mit einem Bereichsunterschied macht. Jetzt kann es nicht den Namen var annehmen, da dieser bereits vergeben ist. 

So wie es aussieht, hat es den nächstbesten Namen genommen, der in einem interessanten englischsprachigen Konstrukt eine Bedeutung hat.

let myPet = 'dog';

Auf Englisch heißt es "Lass mein Haustier ein Hund sein"

34
Charlie H

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 glaube, es gibt etwas mehr Geschichte.

Aus Wikipedia :

Dana Scotts LCF-Sprache war eine Etappe in der Evolution des Lambda-Kalküls in moderne Funktionssprachen. Diese Sprache führte den Let-Ausdruck ein, der seitdem in den meisten funktionalen Sprachen erscheint.

State-full imperative Sprachen wie ALGOL und Pascal implementieren im Wesentlichen einen let-Ausdruck, um einen eingeschränkten Funktionsumfang in Blockstrukturen zu implementieren.

Ich würde gerne glauben, dass dies auch eine Inspiration für die let in Javascript war.

9
oxalorg

Ich denke, dass die Verschuldung von JavaScript gegenüber Scheme hier offensichtlich ist. Schema hat nicht nur let, sondern let *, let * -Werte, let-Syntax und let-values. (Siehe Programmiersprache Scheme, 4. Auflage.).

((Die Wahl fügt der Annahme, dass JavaScript Lispy ist, weitere Glaubwürdigkeit bei, aber - bevor wir mitgerissen werden - nicht homoikonisch.))))

1
Eric H.

Let verwendet einen direkteren begrenzten Bereich der Blockebene, während var normalerweise der Funktionsumfang oder der globale Bereich ist.

Es scheint, dass Let am wahrscheinlichsten gewählt wurde, weil es in so vielen anderen Sprachen zum Definieren von Variablen wie BASIC und vielen anderen vorkommt.

0
OG Sean