Почему имя " let " было выбрано для объявлений переменных в области блоков в JavaScript?

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

7 ответов


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


Я думаю, это следует математической традиции. В математике часто говорят: "пусть x-произвольное действительное число" или что-то в этом роде.


добавлять к ответ exebook использование математики ключевого слова пусть также хорошо инкапсулирует области применения let при использовании в Javascript / ES6. В частности, так же, как следующий код ES6 игнорирует назначение в фигурных скобках toPrint и выводит значение 'Hello World':

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

пусть как используется в формализованной математике (особенно написание доказательств) указывает, что текущий экземпляр переменной существует только в рамках этой логической идеи. В следующем примере x сразу же приобретает новое тождество при вхождении в новую идею (обычно это понятия, необходимые для доказательства основной идеи) и сразу же возвращается к старому x по завершении суб-доказательства. Конечно, как и в кодировании, это считается несколько запутанным и поэтому обычно избегается, выбирая другое имя для другой переменной.

пусть x будет так и так...

доказательство вещи

новая идея { пусть x будет чем-то другим ... докажите что-нибудь } заключите новую идею

докажите основную идею со старым x


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

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

let myPet = 'dog';

на английском языке он говорит: "Пусть мой питомец будет собакой"


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

но я считаю, что в этом есть немного больше истории.

С Википедия:

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

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

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


переменные, объявленные let, имеют в качестве своей области блок, в котором они определены, а также в любых содержащихся подблоках. Таким образом, let работает очень похоже на var. Основное отличие заключается в том, что область переменной var-это вся заключающая функция. См. некоторые примеры ниже.

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
}

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

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