Я понимаю, почему var
берет это имя - оно является переменным, const
- оно является константой, но каково значение этого имени let
, которое относится к текущему блоку? Будь как будет?
javascript
ecmascript-6
let
Виталий Зданевич
источник
источник
LET
. Там могут быть более ранние примеры языка.LET
описано на стр. 7 первого проекта руководства от мая 1964 г., pdf здесь .const
, это постоянная или неизменяемая (доступная только для чтения) ссылка на объект, где сам объект все еще является изменяемым. Например. После объявления / правопреемникаconst foo = ['bar']
, по-foo.push('bat')
прежнему будет законным, ноfoo = ['bar', 'bat']
это не так . Но это слишком много печатать.Ответы:
Пусть это математическое утверждение, которое было принято ранними языками программирования, такими как Scheme и Basic. Переменные считаются объектами низкого уровня, не подходящими для более высоких уровней абстракции, поэтому многие разработчики языка стремятся представить похожие, но более мощные понятия, такие как Clojure, F #, Scala, где
let
может означать значение или переменную, которая может быть назначена, но не изменилось , что, в свою очередь, позволяет компилятору отлавливать больше ошибок программирования и лучше оптимизировать код.JavaScript был
var
с самого начала, поэтому им просто нужно было другое ключевое слово, и он просто позаимствован из десятков других языков, которыеlet
уже используют как традиционное ключевое слово как можноvar
ближе, хотя в JavaScriptlet
вместо этого создается локальная переменная области видимости блока.источник
len('var') === len('let')
означает, что ваши объявления хорошо вписываются в ваш редактор в любом случае. Я еще не нашел ничего, чтобы предположить, что это было преднамеренно, но это может быть либо a) визуально приятным и более читабельным, либо b) ужасно раздражающим, чтобы отлаживать, если вы смешиваете два (что в любом случае кажется плохой идеей, но я ' Я видел это сделано).let
традиционно использовался для описания константы, так как вlet C = the speed of light
Javascript решили использовать let для описания переменной с нестандартной областью видимости и в то же время ввести другое ключевое слово для констант.let
близко кvar
. Также Scala не использует,let
поэтому я не вижу, насколько это актуально.Я думаю, это следует математической традиции. В математике часто говорят «пусть х - произвольное действительное число» или тому подобное.
источник
В дополнение к ответу exebook , математическое использование ключевого слова let также хорошо отражает возможные последствия
let
использования Javascript / ES6. В частности, так же, как следующий код ES6 не знает о присвоении в скобках,toPrint
когда он печатает значение'Hello World'
,Позвольте, как используется в формализованной математике (особенно в написании доказательств), указывает, что текущий экземпляр переменной существует только для объема этой логической идеи. В следующем примере, х сразу же приобретает новую идентичность при входе в новую идею (обычно это концепции, необходимые для доказательства основной идеи) и сразу же возвращается к старому х после завершения дополнительного доказательства. Конечно, так же, как и в кодировании, это считается несколько запутанным и поэтому обычно избегается путем выбора другого имени для другой переменной.
Пусть х будет таким-то ...
Доказательство вещи
Новая идея {Пусть x будет чем-то другим ... докажи что-то} Заключение Новая идея
Докажите основную идею со старым х
источник
let
.let
это все о сфере.let
заставляет меня думать о чем-то подобном, происходящем в уме автора кода: «Хорошо, только на этот моментlet foo = bar
, но затем он может вернуться к своему первоначальному значению или перестать быть. Это аккуратно проиллюстрировано на примеры для блока Scope и повторного объявление переменных в этом W3Schools представления оlet
. Опять же , не делая вид , чтобы принести в научном ответе какого - то, но этот обмен больше как мнемонические помнить , когда я хочу использоватьlet
.toPrint
которая существует только в блоке , а затем покорно выбрасывает эту переменную, когда заканчивается блок. И после выхода мы вернулись во внешнюю сферу, где внутреннееtoPrint
больше не существует, поэтомуconsole.log(toPrint)
относится к внешнемуtoPrint
. Дело не в том, что что-то игнорируется, просто уlet
переменных конечное время жизни определяется их областью действия.Он делает именно то, что
var
делает с разницей в объеме. Теперь он не может принять имя,var
поскольку оно уже занято.Похоже, что оно приняло следующее лучшее имя, которое имеет семантику в интересной конструкции на английском языке.
На английском языке написано «Пусть мой питомец будет собакой»
источник
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 дополнительных символа текста программы на оператор имели значение, особенно в «больших» программах.Скорее всего, это был самый идиоматичный выбор. Это не только легко говорить, но и интуитивно понятно. Некоторые могут поспорить, даже больше, чем
var
.Но я считаю, что здесь есть немного больше истории.
Из Википедии :
Я хотел бы верить, что это тоже послужило вдохновением для
let
Javascript.источник
LET
в BASIC, с 1964 года.let
в JavaScript. Не совсем не соответствует действительности, но без какого-либо реального значения. (И ни в коем случае исключает возможность того, что использование Скотта «пусть» была также вдохновлена BASICLET
.)Let использует более непосредственную ограниченную область действия на уровне блоков, тогда как var обычно является функцией или глобальной областью действия.
Кажется, что let был выбран наиболее вероятно, потому что он найден во многих других языках для определения переменных, таких как BASIC и многих других.
источник
Я думаю, что задолженность JavaScript перед Scheme здесь очевидна. Схема не только допускает, но и допускает значения *, let *, синтаксис let и значения let. (См. Язык программирования схем, 4-е изд.).
((Этот выбор добавляет уверенности в том, что JavaScript - это Лиспы, но - прежде чем мы увлечемся - не гомойконичен.))))
источник
Это также может означать что - то вроде «лексического типа или Связали окружающей среды» .. Это беспокоит меня , что было бы просто «пусть это будет что ». И пусть rec не будет иметь смысла в лямбда-исчислении.
источник