Я понимаю, почему var
принимает это имя - это переменная, const
- это константа, но что означает имя для let
, которое относится к текущему блоку? Будь как будет?
Почему для объявлений переменных с блочной областью видимости в JavaScript было выбрано имя let?
Ответы (8)
Let - это математическое выражение, которое было принято в ранних языках программирования, таких как Scheme и Basic. Переменные считаются низкоуровневыми сущностями, не подходящими для более высоких уровней абстракции, поэтому многие разработчики языков стремятся ввести аналогичные, но более мощные концепции, такие как Clojure, F #, Scala, где let
может означать значение или переменную , которая может быть назначен, но не изменен, что, в свою очередь, позволяет компилятору улавливать больше ошибок программирования и лучше оптимизировать код.
В JavaScript было var
с самого начала, поэтому им просто нужно было другое ключевое слово, и они просто заимствованы из десятков других языков, которые уже используют let
в качестве традиционного ключевого слова как можно ближе к var
, хотя в JavaScript let
вместо этого создает локальную переменную области блока.
len('var') === len('let')
, что означает, что ваши объявления в любом случае хорошо выстраиваются в вашем редакторе. Я еще не нашел ничего, чтобы предположить, что это было преднамеренно, но это может быть либо а) визуально приятным и более читаемым, или б) ужасно раздражающим для отладки, если вы смешиваете два (что в любом случае кажется плохой идеей, но я '' я видел это сделано).
- person brichins; 25.10.2017
let
традиционно использовался для описания константы, как в let C = the speed of light
, поэтому Javascript решил использовать let для описания переменной с нестандартной областью видимости и в то же время ввести другое ключевое слово для констант.
- person fijiaaron; 09.03.2018
let
близок к var
. Также Scala не использует let
, поэтому я не понимаю, насколько это актуально.
- person Aluan Haddad; 11.04.2018
let
используется для констант в javascript? во всяком случае, я хорошо знаком с пусть x будет таким-то и таким-то, как я на самом деле упоминал в своем комментарии. Я возражал только против его использования для констант. Возможно, это все еще происходит, и мне действительно нужно читать больше статей по математике.
- person Nacht; 12.07.2020
let
предназначен для констант. Эта предполагаемая традиция может создать впечатление, будто JavaScript делает что-то наоборот. Но, конечно, такой традиции нет, и на этот счет можно было бы дать более четкий ответ. Кроме того, последнее слово вместо этого представляло контраст с var
, а не с традицией. Опять же, легко ошибиться, сказав, что область видимости на уровне блока нестандартна. Но конечно стандартно. С этими ошибками более понятна небольшая тирада fijiaaron против JavaScript.
- person Matt; 12.07.2020
let
традиционно используется для констант. Это не случай. Как программная конструкция LET
впервые появилась в 1964 году в BASIC, в котором вообще не было неизменяемых. Это было за десять лет до Scheme. Причина, по которой let
используется для неизменяемых в Scheme / Clojure / Scala, состоит только в том, что неизменяемые объекты настолько распространены в функциональных языках. Что касается F #, поскольку он является многопарадигмальным языком, он использует let
для неизменяемых и изменяемых переменных. В математике let используется для любого типа определения переменной или свойства.
- person Matt; 12.07.2020
let
является традиционным, точно соответствует цели.
- person Matt; 12.07.2020
Думаю, это следует математической традиции. В математике часто говорят «пусть x будет произвольным действительным числом» или тому подобное.
В дополнение к ответу exebook, математическое использование ключевого слова let также хорошо инкапсулирует последствия для области охвата let
при использовании в Javascript / ES6. В частности, так же, как следующий код ES6 не знает о назначении в фигурных скобках toPrint
, когда выводит значение 'Hello World'
,
let toPrint = 'Hello World.';
{
let toPrint = 'Goodbye World.';
}
console.log(toPrint); // Prints 'Hello World'
let, используемое в формализованной математике (особенно при написании доказательств), указывает, что текущий экземпляр переменной существует только в рамках этой логической идеи. В следующем примере x сразу же приобретает новую идентичность при входе в новую идею (обычно это концепции, необходимые для доказательства основной идеи) и сразу же возвращается к старому x после завершения вспомогательного доказательства. Конечно, так же, как и в кодировании, это считается несколько запутанным, и поэтому обычно избегают, выбирая другое имя для другой переменной.
Пусть x будет таким-то ...
Доказательства
Новая идея {Пусть x будет чем-то еще ... докажите что-нибудь} Сделайте новую идею
Подтвердите основную идею с помощью старых x
let
. let
- это все о размахе.
- person jinglesthula; 13.07.2017
let
заставляет меня думать о чем-то подобном, происходящем в голове автора кода, хорошо, только в этот момент, let foo = bar
, но затем он может вернуться к своему исходному значению или перестать быть. Это четко показано в примерах для области действия блока и повторного объявления переменных в этой презентации W3Schools из let
. Опять же, я не претендую на какой-то научный ответ, но делюсь этим больше как мнемоническим приемом, чтобы запомнить, когда я хочу использовать let
.
- person Alain; 26.09.2019
toPrint
, которая существует только внутри блока, а затем покорно отбрасывает эту переменную, когда блок заканчивается. И после выхода мы снова во внешней области видимости, где внутренний toPrint
больше не существует, поэтому console.log(toPrint)
относится к внешнему toPrint
. Дело не в том, что что-то игнорируется, просто у let
переменных есть конечное время жизни, определяемое их областью действия.
- person FeRD; 13.01.2020
Он делает то же самое, что и var
, но с разницей в области видимости. Теперь он не может принимать имя var
, поскольку оно уже занято.
Таким образом, похоже, что он взял следующее лучшее имя, которое имеет семантику в интересной конструкции английского языка.
let myPet = 'dog';
На английском написано: «Пусть моим питомцем будет собака».
A$="HELLO WORLD"
). В число задействованных интерпретаторов входили Rockwell AIM 65 BASIC, Atari Basic, MBASIC 5 на CP / M, Applesoft BASIC и даже BASCOM, компилятор MS BASIC на CP / M. У VAX BASIC была LET, но, насколько я помню, она не требовалась. В то время памяти было мало, и 3 или 4 дополнительных символа текста программы на оператор имели значение, особенно в больших программах.
- person Peter Hull; 08.01.2018
Скорее всего, это был самый идиоматический выбор. Не только легко говорить, но и интуитивно понятно. Некоторые могут поспорить, даже больше, чем var
.
Но я считаю, что в этом есть немного больше истории.
Из Википедии:
Язык LCF Даны Скотт был этапом в эволюции лямбда-исчисления в современные функциональные языки. В этом языке появилось выражение let, которое с того времени появилось в большинстве функциональных языков.
Императивные языки с полным состоянием, такие как ALGOL и Pascal, по сути, реализуют выражение let для реализации ограниченного объема функций в блочных структурах.
Я хотел бы верить, что это тоже было источником вдохновения для let
в Javascript.
LET
в BASIC, с 1964 года.
- person Joseph Quinsey; 27.03.2018
let
в JavaScript. Не совсем так, насколько это возможно, но без какого-либо реального значения. (И это никоим образом не исключает возможности того, что использование Скоттом let было также вдохновлено BASIC LET
.)
- person FeRD; 24.03.2020
Это также может означать что-то вроде «Тип лексического окружения или связанный». Меня беспокоит, что это будет просто «пусть это будет тем». И пусть rec не имеет смысла в лямбда-исчислении.
Let использует более непосредственную ограниченную область на уровне блока, тогда как var обычно является областью функции или глобальной областью.
Кажется, что let был выбран, скорее всего, потому что он используется во многих других языках для определения переменных, таких как BASIC и многих других.
Я думаю, что здесь очевидна заслуга JavaScript перед Scheme. В схеме есть не только let, но и let *, let * -значения, let-синтаксис и let-значения. (См. Язык программирования схем, 4-е изд.).
((Этот выбор добавляет доверия к представлению о том, что JavaScript - это Lispy, но - пока мы не увлеклись - не гомоиконичен.))))
LET
. Могут быть более ранние языковые примеры. - person David R Tribble   schedule 02.08.2017LET
описано на странице 7 первого проекта руководства от мая 1964 года, pdf здесь. - person Joseph Quinsey   schedule 27.03.2018const
- это постоянная или неизменяемая (только для чтения) ссылка на объект, где сам объект по-прежнему является изменяемым. Например. После объявления / назначенияconst foo = ['bar']
,foo.push('bat')
все еще будет законным, аfoo = ['bar', 'bat']
- нет. Но это слишком много для набора текста. - person user982671   schedule 25.05.2018