2016-06-20 3 views
173

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

+4

[BASIC] (https://en.wikipedia.org/wiki/BASIC), изобретенный в 1962 году, используется 'LET'. Могут быть более ранние языковые примеры. –

ответ

207

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

+3

хорошо объяснено. – gani

+25

И официальная страница документации Mozilla ссылается на эту страницу по этому вопросу https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – SarathChandra

+2

Также приятно, что 'len ('var') == = len ('let') ', что означает, что ваши объявления вписываются в ваш редактор в любом случае.Я еще ничего не нашел, чтобы предположить, что это было преднамеренно, но это может быть: a) визуально приятным и читаемым, или б) ужасно раздражающим отлаживать, если вы смешиваете два (что кажется, как плохая идея в любом случае, я видел это). – brichins

49

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

29

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

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

let myPet = 'dog'; 

На английском языке он говорит: «Пусть мой любимчик быть собакой»

+3

Хотя возникновение let может быть лингвистическим и математическим, ссылка на домашнюю страницу, несомненно, является заявлением LET во всех версиях языка программирования BASIC, которое многие из авторов ES6 начали бы изучать, если они более 40 лет. –

+3

@wide_eyed_pupil Просто FYI: как более 40 (хотя и не автор ES6), который вырос на BASIC, ни одна из сообществ, с которыми я не занималась, использовала LET в обычной практике; мы просто назначили переменные, как это делает Python (например, «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 дополнительных символа текста программы за каждое заявление имели значение, особенно в «больших» программах. –

+0

@PeterHull Это интересно, я сделал свою первую кодировку на карточках, отмеченных карандашом, прикрепленных к цифровому процессору, а затем мейнфреймы в исследовательской лаборатории старика и цифровой PDP8 в школе. ни разу не видели, как люди используют LET без фактического использования заявления, а не в книгах, которые я читал. Имейте в виду, мне было предложено закодировать в FORTRAN и PASCAL, как только у меня получилось хорошее, основное было так плохо, как было, даже не имея GOSUB (то есть функции многократного использования) в версиях, которые я использовал. –

8

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

Но я считаю, что есть еще немного истории.

Из википедии:

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

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

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

26

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

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

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

Пусть х так и так ...

  Proof материал

  Новая идея {Пусть х что-то еще ... что-то доказать} Заключаем New Idea

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

+4

Я думаю, что это действительно полезно. Принятый ответ почти немного вводит в заблуждение, поскольку он говорит о том, что ценность не может быть изменена, и это не то, что «пусть» вообще. 'let' - все о сфере видимости. – jinglesthula

0

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

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

1

Переменные, объявленные 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 
} 
Смежные вопросы