Я понимаю, почему var
берет это имя - это переменная, const
- это константа, но в чем смысл названия для let
, который относится к текущему блоку? Будь как будет?Почему имя «let» выбрано для объявлений переменных с блочной областью в JavaScript?
ответ
Пусть это математическое утверждение, которое было принято на ранних языках программирования, таких как Scheme и Basic. Переменные считаются объектами низкого уровня, не подходящими для более высоких уровней абстракции, поэтому желание многих разработчиков языка вводить похожие, но более мощные концепции, такие как Clojure, F #, Scala, где let
может означать значение или переменную , которая может быть назначенный, но не измененный, что, в свою очередь, позволяет компилятору уловить больше ошибок программирования и лучше оптимизировать код. JavaScript имел var
с самого начала, поэтому они просто нуждались в другом ключевом слове и просто заимствовали из десятков других языков, которые используют let
уже как традиционное ключевое слово как можно ближе к var
, хотя в JavaScript let
вместо этого создает локальную переменную области блока.
хорошо объяснено. – gani
И официальная страница документации Mozilla ссылается на эту страницу по этому вопросу https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/let – SarathChandra
Также приятно, что 'len ('var') == = len ('let') ', что означает, что ваши объявления вписываются в ваш редактор в любом случае.Я еще ничего не нашел, чтобы предположить, что это было преднамеренно, но это может быть: a) визуально приятным и читаемым, или б) ужасно раздражающим отлаживать, если вы смешиваете два (что кажется, как плохая идея в любом случае, я видел это). – brichins
Я предполагаю, что это соответствует математической традиции. В математике часто говорят, что «пусть x - произвольное действительное число» или тому подобное.
Он делает то, что делает var
с разницей в объеме. Теперь он не может принять имя var
, так как это уже сделано.
Итак, похоже, что оно заняло следующее лучшее имя, которое имеет семантику в интересной конструкции английского языка.
let myPet = 'dog';
На английском языке он говорит: «Пусть мой любимчик быть собакой»
Хотя возникновение let может быть лингвистическим и математическим, ссылка на домашнюю страницу, несомненно, является заявлением LET во всех версиях языка программирования BASIC, которое многие из авторов ES6 начали бы изучать, если они более 40 лет. –
@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 дополнительных символа текста программы за каждое заявление имели значение, особенно в «больших» программах. –
@PeterHull Это интересно, я сделал свою первую кодировку на карточках, отмеченных карандашом, прикрепленных к цифровому процессору, а затем мейнфреймы в исследовательской лаборатории старика и цифровой PDP8 в школе. ни разу не видели, как люди используют LET без фактического использования заявления, а не в книгах, которые я читал. Имейте в виду, мне было предложено закодировать в FORTRAN и PASCAL, как только у меня получилось хорошее, основное было так плохо, как было, даже не имея GOSUB (то есть функции многократного использования) в версиях, которые я использовал. –
Наиболее вероятная возможность состоит в том, что это был самый идиоматический выбор. Это не только легко говорить, но и интуитивно понятно. Некоторые могут возразить, даже больше, чем var
.
Но я считаю, что есть еще немного истории.
Из википедии:
язык LCF Дана Скотт был этап в эволюции лямбда-исчисления в современных функциональных языках. Этот язык ввел выражение let, которое появилось на большинстве функциональных языков с того времени.
Полные императивные языки, такие как ALGOL и Pascal, по существу реализуют выражение let, чтобы реализовать ограниченный объем функций в блочных структурах.
Я хотел бы верить, что это тоже было вдохновение для let
в Javascript.
Добавление к 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
Я думаю, что это действительно полезно. Принятый ответ почти немного вводит в заблуждение, поскольку он говорит о том, что ценность не может быть изменена, и это не то, что «пусть» вообще. 'let' - все о сфере видимости. – jinglesthula
Позволяет использовать более ограниченную область с ограниченным уровнем блока, тогда как var - это область функций или глобальная область действия.
Кажется, что выбранный был выбран, скорее всего, потому, что он встречается на многих других языках для определения переменных, таких как BASIC и многих других.
Переменные, объявленные 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
}
- 1. Почему Java не имеет объявлений переменных с блочной областью?
- 2. Язык с блочной областью?
- 3. Невозможно переопределить переменную 'top' с блочной областью в машинописном тексте
- 4. Как я могу создать переменные с блочной областью в Python?
- 5. Почему выбрано значение sqlliteconnection для статических переменных?
- 6. «Невозможно переопределить переменную с блочной областью» в несвязанных файлах
- 7. с заданной областью SCSS переменных для themeing
- 8. Несколько объявлений переменных
- 9. Использование ANTLR для идентификации объявлений глобальных переменных в файле JavaScript
- 10. Проблема с областью переменных в Js/JQuery
- 11. Проблема с областью глобальных переменных
- 12. Застрял с областью переменных hexo
- 13. Проблемы с областью переменных JQuery
- 14. Путаница с областью определения JavaScript
- 15. получение объявлений переменных
- 16. Определение «дочерних» переменных в «let»
- 17. Управление областью переменных
- 18. JavaScript blockscope с let
- 19. Захват форматированных объявлений переменных в ANTLR
- 20. Проблемы с областью в javascript
- 21. Создание переменных в функции с глобальной областью?
- 22. Concatenate строка с областью переменных в шаблоне
- 23. замена eval в переменных с закрытой областью
- 24. Проблема с областью Javascript
- 25. Инспекция для обеспечения инициализации всех объявлений переменных
- 26. Проблемы с областью Javascript
- 27. AngularJS набор нг-контроллер с областью переменных
- 28. Проблема с областью (javascript)
- 29. Помогите с областью JavaScript
- 30. Типы разрешены для объявлений переменных цикла?
[BASIC] (https://en.wikipedia.org/wiki/BASIC), изобретенный в 1962 году, используется 'LET'. Могут быть более ранние языковые примеры. –