Rozumiem, dlaczego var
bierze tę nazwę - jest zmienna const
- jest stała, ale jakie jest znaczenie nazwy let
, która dotyczy bieżącego bloku? Niech będzie?
javascript
ecmascript-6
let
Witalij Zdanevich
źródło
źródło
LET
. Mogą istnieć wcześniejsze przykłady języków.LET
opisano na stronie 7 pierwszego szkicu instrukcji z maja 1964 r., Pdf tutaj .const
jest to stałe lub niezmienne (tylko do odczytu) odwołanie do obiektu, w którym sam obiekt jest nadal zmienny. Na przykład. Po deklaracji / assignconst foo = ['bar']
,foo.push('bat')
nadal byłoby legalne, alefoo = ['bar', 'bat']
nie jest. Ale to za dużo pisania.Odpowiedzi:
Niech jest wyrażeniem matematycznym przyjętym przez języki programowania wczesnego, takie jak Scheme i Basic. Zmienne są uważane za jednostki niskiego poziomu, które nie są odpowiednie dla wyższych poziomów abstrakcji, dlatego pragnienie wielu projektantów języków do wprowadzenia podobnych, ale potężniejszych pojęć, takich jak Clojure, F #, Scala, gdzie
let
może to oznaczać wartość lub zmienną, którą można przypisać, ale bez zmian , co z kolei pozwala kompilatorowi wychwycić więcej błędów programistycznych i lepiej zoptymalizować kod.JavaScript miał
var
od samego początku, więc potrzebowali tylko innego słowa kluczowego i właśnie zapożyczyli go z dziesiątek innych języków, które używająlet
już tradycyjnego słowa kluczowego tak blisko,var
jak to możliwe, chociaż w JavaScriptlet
tworzy zamiast tego zmienną lokalną o zasięgu blokowym.źródło
len('var') === len('let')
, co oznacza, że twoje deklaracje ładnie układają się w edytorze. Nie znalazłem jeszcze niczego, co sugerowałoby, że było to celowe, ale może to być: a) przyjemne wizualnie i bardziej czytelne, lub b) strasznie denerwujące podczas debugowania, jeśli pomieszacie te dwa (co wydaje się złym pomysłem, ale ja ” widziałem to zrobione).let
tradycyjnie używany był do opisywania stałej, ponieważ wlet C = the speed of light
JavaScript Javascript zdecydował się na użycie let do opisania zmiennej o niestandardowym zakresie, a jednocześnie wprowadzić inne słowo kluczowe dla stałych.let
jest bliskovar
. Również Scala nie używa,let
więc nie widzę, jak to jest istotne.Myślę, że wynika to z tradycji matematycznej. W matematyce często mówi się „niech x będzie dowolną liczbą rzeczywistą” lub tym podobne.
źródło
Dodając do odpowiedzi exebook , użycie słowa kluczowego w matematyce pozwala również dobrze ujmować implikacje określające zakres,
let
gdy jest używane w Javascript / ES6. W szczególności, podobnie jak poniższy kod ES6 nie jest świadomy przypisania w nawiasach,toPrint
kiedy wypisuje wartość'Hello World'
,Niech użyte w sformalizowanej matematyce (zwłaszcza pisaniu dowodów) wskazuje, że bieżąca instancja zmiennej istnieje tylko dla zakresu tej logicznej idei. W poniższym przykładzie x natychmiast zyskuje nową tożsamość po wejściu do nowej idei (zwykle są to koncepcje niezbędne do udowodnienia głównej idei) i wraca natychmiast do starej x po zakończeniu pod-dowodu. Oczywiście, podobnie jak w przypadku kodowania, jest to uważane za nieco mylące i dlatego zwykle można tego uniknąć, wybierając inną nazwę dla innej zmiennej.
Niech x będzie takie a takie ...
Dowody
Nowy pomysł {Niech x będzie czymś innym ... udowodnij coś} Zawrzyj nowy pomysł
Udowodnij główny pomysł starym X
źródło
let
o co w ogóle nie chodzi.let
chodzi o zakres.let
każe mi myśleć o czymś takim, co dzieje się w umyśle twórcy kodu: „Ok, tylko na tę chwilęlet foo = bar
, ale potem może wrócić do swojej pierwotnej wartości lub przestać być. Jest to dobrze zilustrowane w przykłady zmiennych blokowych i zmiennych redeclaringowych w tej prezentacji W3Schools zlet
. Ponownie, nie udając, że przynosimy jakąś naukową odpowiedź, ale dzieląc się tym bardziej jako mnemoniczne urządzenie do zapamiętania, kiedy chcę użyćlet
.toPrint
która istnieje tylko w bloku , a następnie sumiennie wyrzuca tę zmienną po zakończeniu bloku. A po wyjściu z powrotem znajdujemy się w zewnętrznym zasięgu, gdzie wnętrzetoPrint
już nie istnieje, więcconsole.log(toPrint)
odnosi się do zewnętrznegotoPrint
. Nie jest tak, że cokolwiek jest ignorowane, po prostulet
zmienne mają skończone czasy życia zdefiniowane przez ich zakres.Robi dokładnie to, co
var
robi z różnicą zakresu. Teraz nie może przyjąć nazwy,var
ponieważ jest już zajęta.Wygląda więc na to, że przyjął kolejną najlepszą nazwę, która ma semantyczną postać w interesującym języku angielskim.
W języku angielskim napisane jest „Niech moje zwierzę będzie psem”
źródło
A$="HELLO WORLD"
) Zaangażowani tłumacze to Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 na CP / M, Applesoft BASIC, a nawet BASCOM, kompilator MS BASIC na CP / M. VAX BASIC miał LET, ale, jak pamiętam, nie wymagał tego. Pamięć była wtedy napięta, a 3 lub 4 dodatkowe znaki tekstu programu na instrukcję robiły różnicę, szczególnie w „dużych” programach.Najbardziej prawdopodobne jest to, że był to najbardziej idiotyczny wybór. Łatwo jest mówić, ale intuicyjnie go zrozumieć. Niektórzy mogą się kłócić, nawet bardziej niż
var
.Ale sądzę, że jest w tym trochę więcej historii.
Z Wikipedii :
Chciałbym wierzyć, że to też była inspiracja dla
let
Javascript.źródło
LET
w języku BASIC z 1964 r.let
do JavaScript. O ile nie jest to całkowicie nieprawdziwe, ale bez prawdziwego znaczenia. (I w żaden sposób nie wyklucza to, że użycie słowa „let” przez Scotta również zostało zainspirowane przez BASICLET
.)Let używa bardziej bezpośredniego zakresu ograniczonego na poziomie bloku, podczas gdy var jest zwykle zasięgiem funkcji lub zasięgiem globalnym.
Wygląda na to, że najprawdopodobniej został wybrany, ponieważ w wielu innych językach można zdefiniować zmienne, takie jak BASIC i wiele innych.
źródło
Myślę, że zadłużenie JavaScript w Scheme jest tutaj oczywiste. Schemat nie tylko pozwolił, ale pozwolił *, let * -wartości, let-składnia i let-wartości. (Patrz, The Scheme Programming Language, 4th Ed.).
((Wybór dodaje jeszcze większej wiarygodności do pojęcia, że JavaScript to Lispy, ale - zanim nas porwie - nie homoiconic.)))
źródło
To może również oznaczać coś jak „Lexical typ środowiska lub Tied” .. to denerwuje mnie, że to po prostu być „niech to będzie , że ”. I niech rec nie ma sensu w rachunku lambda.
źródło