const
и let
были представлены как Будущие зарезервированные слова в ECMA2011 .
ECMA2011 - Введение const
и let
как Будущие зарезервированные слова
7.6.1.2 Будущие зарезервированные слова
Следующие слова используются в качестве ключевых слов в предлагаемых расширениях и поэтому зарезервированы, чтобы учесть возможность принятие этих расширений в будущем.
FutureReservedWord ::
- class
- enum
- расширяет
- super
- const
- экспорт
- import
Следующие токены также считаются FutureReservedWords , если они встречаются в коде строгого режима (см. 10.1. 1). Вхождение любого из этих токенов в код строгого режима в любом контексте, где возникновение FutureReservedWord приведет к ошибке, также должно привести к эквивалентной ошибке:
- реализует
- let
- частный
- publi c
- выход
- интерфейс
- пакет
- защищенный
- stati c
ECMA2012 - Утвержденные ключевые слова
Позже в ECMA2012 оба слова были добавлены как ключевые слова, которые не могут использоваться как идентификаторы .
7.6.1.1 Ключевые слова
Следующие токены являются ключевыми словами ECMAScript и не могут использоваться как идентификаторы в программах на ECMAScript.
ключевое слово ::
- break
- удалить
- импорт
- это
- корпус
- do
- дюйм
- бросок
- catch
- else
- instanceof
- попробовать
- класс
- экспорт
- пусть
- тип
- продолжить
- наконец
- новый
- var
- const
- для
- возврат
- void
- отладчик
- функция
- супер
- при
- по умолчанию
- если
- переключатель
- с
Тогда как const
используется как идентификатор - выдает ошибки в каждом режиме, let
выдает только ошибку, le находится в строгом режиме, что по-прежнему имеет место в вашем примере:
Действительный
Использование let
в качестве идентификатора без строгого режима.
(function(){
//REM: Works
var let = 5;
console.log(let);
})();
Недействительный
Использование const
в качестве идентификатора без строгого режима.
(function(){
//REM: Throws an error
var const = 5;
console.log(const);
})();
Использование let
или const
в качестве идентификаторов в строгом режиме.
(function(){
'use strict';
//REM: Throws an error
var let = 5;
console.log(let);
})();
(function(){
'use strict';
//REM: Throws an error
var const = 5;
console.log(const);
})();
Таким образом, исторически ECMA был более строгим с ключевым словом const
, чем let
из get go. Хотя let
не может использоваться как Идентификатор с ECMA2012, я предполагаю, что он был упущен из виду из-за обратной совместимости.
Здесь - последняя спецификация let
и const
.