2016-06-20 9 views

Antwort

207

Let „mein Haustier ein Hund sein lassen“ ist eine mathematische Aussage, die von den frühen Programmiersprachen wie Schema und Basic angenommen wurde. Variablen werden als Low-Level-Entitäten betrachtet, die nicht für höhere Abstraktionsniveaus geeignet sind, daher der Wunsch vieler Sprachdesigner, ähnliche, aber leistungsfähigere Konzepte einzuführen, wie in Clojure, F #, Scala, wobei let einen Wert oder eine Variable bedeuten kann zugewiesen, aber nicht geändert, was wiederum den Compiler mehr Programmierfehler fangen und Code besser optimieren lässt. JavaScript hatte var von Anfang an, so dass sie nur ein anderes Schlüsselwort benötigten, und nur aus Dutzenden anderer Sprachen, die let verwenden, bereits als traditionelles Schlüsselwort als nahe var wie möglich ausgeliehen, obwohl in JavaScript let Block-Bereich lokale Variable stattdessen erstellt.

+3

gut erklärt. – gani

+25

Und die offizielle Mozilla Dokumentation Seite zitiert diese Seite für diese Frage https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – SarathChandra

+2

Es ist auch schön, dass 'len ('var') == = len ('let') ', was bedeutet, dass Ihre Deklarationen in Ihrem Editor gut zusammenpassen.Ich habe noch nichts gefunden, was dies absichtlich vermuten lässt, aber es kann entweder a) visuell ansprechend und leserlicher sein, oder b) schrecklich nervig zu debuggen, wenn man die beiden mischt (was sowieso eine schlechte Idee zu sein scheint, aber ich ' hab es gesehen). – brichins

49

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

29

Es macht genau das, was die var mit einem Umfang Unterschied macht. Jetzt kann es nicht den Namen var nehmen, da das schon vergeben ist.

So sieht es aus, dass es den nächstbesten Namen genommen hat, der eine Semantik in einem interessanten englischen Sprachkonstrukt hat.

let myPet = 'dog'; 

Auf Englisch sagt, es

+3

Während die Entstehung von let sprachlich und mathematisch sein kann, ist die nah-zu-Hause-Referenz zweifellos die LET-Anweisung in allen Versionen der Programmiersprache BASIC, die viele der Autoren von ES6 gelernt hätten, wenn sie es wären über 40 Jahre alt. –

+3

@wide_eyed_pupil Nur zur Info: Als über 40-Jährige (obwohl kein Autor von ES6), die auf BASIC aufgewachsen sind, hat keine der Communities, in denen ich involviert war, LET in der üblichen Praxis verwendet; wir haben nur Variablen zugewiesen, wie es Python jetzt tut (zB 'A $ =" HELLO WORLD ") Die beteiligten Interpreten waren Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 auf CP/M, Applesoft BASIC und sogar BASCOM, das MS BASIC Compiler auf CP/M. VAX BASIC hatte LET, aber ich brauchte es nicht, soweit ich mich erinnere. Der Speicher war damals eng, und die 3 oder 4 zusätzlichen Zeichen des Programmtextes pro Anweisung machten einen Unterschied, besonders in "großen" Programmen. –

+0

@PeterHull Das ist interessant, ich habe meine erste Kodierung auf mit Bleistift markierten Karten gemacht, die an eine digitale CPU angeschlossen sind, dann Mainframes im Forschungslabor des alten Mannes und einen digitalen PDP8 in der Schule. Ich habe nie gesehen, dass Menschen LET benutzen, ohne die Aussage tatsächlich zu benutzen, nicht in Büchern, die ich gelesen habe. Wohlgemerkt, ich wurde ermutigt, in FORTRAN und PASCAL zu programmieren, sobald ich irgendein gutes, grundlegendes Wesen so schlecht wie es war, nicht einmal GOSUB (d. H. Wiederverwendbare Funktionen) in den Versionen, die ich verwendet habe. –

8

Die wahrscheinlichste Möglichkeit ist, dass es die idiomatische 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, es gibt ein wenig mehr Geschichte dazu.

Aus Wikipedia:

Dana Scotts LCF Sprache war ein Stadium in der Entwicklung der Lambda-Kalkül in modernen funktionalen Sprachen. Diese Sprache führte den Let-Ausdruck ein, der seither in den meisten funktionalen Sprachen erschienen ist.

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

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

26

Hinzufügen zu exebook's response, die Mathematik Verwendung des Keyword-lassen auch gut die Scoping Auswirkungen let kapselt wenn in Javascript/ES6 verwendet.Insbesondere, wie der folgende ES6 Code ignoriert die Zuordnung in Klammern von toPrint und druckt den Wert 'Hello World':

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

lassen wie in formalisierten Mathematik (vor allem das Schreiben von Beweisen) verwendet wird, zeigt, dass die aktuelle Instanz einer Variablen existiert nur für den Umfang dieser logischen Idee. Im folgenden Beispiel erhält x bei der Eingabe der neuen Idee sofort eine neue Identität (in der Regel sind dies Konzepte, die notwendig sind, um die Hauptidee zu beweisen) und kehrt nach dem Abschluss des Unterbeweises sofort zum alten x zurück. Natürlich wird dies, genau wie beim Codieren, als etwas verwirrend angesehen und wird daher normalerweise vermieden, indem ein anderer Name für die andere Variable gewählt wird.

Sei x so und so ...

  Proof Sachen

  New Idea {Sei x etwas anderes sein ... beweisen etwas} Conclude New Idea

  Beweisen Hauptidee mit alten x

+4

Ich denke, das ist wirklich nützlich. Die akzeptierte Antwort ist fast ein bisschen irreführend, da sie davon spricht, dass der Wert nicht geändert werden kann, was "Let" überhaupt nicht ist. 'Let' dreht sich alles um den Umfang. – jinglesthula

0

Let verwendet einen direkteren, auf Blockebene begrenzten Bereich, 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 gefunden wird, um Variablen wie BASIC und viele andere zu definieren.

1

Variablen, die von let deklariert werden, haben als ihren Gültigkeitsbereich den Block, in dem sie definiert sind, sowie in allen enthaltenen Unterblöcken. Lassen Sie sich auf diese Weise sehr ähnlich wie Var. Der Hauptunterschied besteht darin, dass der Bereich einer var-Variablen die gesamte umschließende Funktion ist. Siehe unten einige Beispiele.

function varTest() { 
    var x = 1; 
    if (true) { 
    var x = 2; // same variable! 
    console.log(x); // 2 
    } 
    console.log(x); // 2 
} 

function letTest() { 
    let x = 1; 
    if (true) { 
    let x = 2; // different variable 
    console.log(x); // 2 
    } 
    console.log(x); // 1 
} 
Verwandte Themen