Я понимаю, почему var принимает это имя - это переменная, const - это константа, но что означает имя для let, какие области до текущего блока? Пусть будет?

Ответы (8)

Let - математическое выражение, принятое в ранних языках программирования, таких как Scheme и Basic. Переменные считаются низкоуровневыми сущностями, не подходящими для более высоких уровней абстракции, поэтому многие разработчики языков стремятся ввести аналогичные, но более мощные концепции, такие как Clojure, F #, Scala, где let может означать значение, или переменная , которая может быть назначена, но не изменена, что, в свою очередь, позволяет компилятору улавливать больше ошибок программирования и лучше оптимизировать код.

В JavaScript с самого начала было var, поэтому им просто нужно было другое ключевое слово, и они просто заимствованы из десятков других языков, которые уже используют let как традиционное ключевое слово, максимально приближенное к var насколько это возможно, хотя в JavaScript let вместо этого создает локальную переменную области блока.

Полагаю, это следует математической традиции. В математике часто говорят: «Пусть x будет произвольным действительным числом» или тому подобное.

Let использует более непосредственную ограниченную область на уровне блока, тогда как var обычно является областью функции или глобальной областью.

Кажется, что let был выбран, скорее всего, потому, что он используется во многих других языках для определения переменных, таких как BASIC и многие другие.

Он делает то же самое, что var, но с разницей в области видимости. Теперь он не может принимать имя var, поскольку оно уже занято.

Похоже, что он взял следующее лучшее имя, которое имеет семантику в интересной конструкции английского языка.

let myPet = 'dog';

На английском написано «Пусть мой питомец будет собакой»

Это также может означать что-то вроде «Тип лексического окружения или связанный». Меня беспокоит, что это будет просто «пусть это будет , что». И пусть rec не имеет смысла в лямбда-исчислении.

Скорее всего, это был самый идиоматический выбор. Не только легко говорить, но и интуитивно понятно. Некоторые могут возразить, даже больше, чем var.

Но я думаю, здесь есть немного больше истории.

Из Википедия:

Язык LCF Даны Скотт был этапом в эволюции лямбда-исчисления в современные функциональные языки. В этом языке появилось выражение let, которое с того времени появилось в большинстве функциональных языков.

Императивные языки с полным состоянием, такие как ALGOL и Pascal, по сути, реализуют выражение let для реализации ограниченного объема функций в блочных структурах.

Мне хотелось бы верить, что это тоже было источником вдохновения для let в Javascript.

Я думаю, что заслуга JavaScript перед Scheme здесь очевидна. В схеме есть не только let, но и let *, let * -значения, let-синтаксис и let-значения. (См. Язык программирования схем, 4-е изд.).

((Этот выбор добавляет доверия к представлению о том, что JavaScript является Lispy, но - пока мы не увлеклись - не гомоиконным.))))

В дополнение к ответу 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

2022 WebDevInsider