Почему let = 0 действителен, но не var = 0?
Почему
let=0
Ответы
Ответ 1
Поскольку var
был ключевым словом навсегда, но let
нет. Таким образом, при добавлении let
к языку, комитет TC39 должен указать это такое, что существующий код, который использовал let
в качестве идентификатора не сломаться. (Одно из их главных правил - "не сломать паутину", и они относятся к ней очень серьезно [к счастью].)
Итак, let
это ключевое слово в контексте, такое как объявление let
, но также может быть идентификатором:
let a = 42; // Keyword, due to context
let = "I'm an identifier"; // Identifier, due to context
console.log(a);
console.log(let);
Ответ 2
var
является зарезервированным словом и не может быть именем глобальной переменной. Но let
также зарезервированное слово. И он отличается от var
что он может использоваться как имя переменной.
let
был добавлен в версию ES6. Для совместимости со старыми кодами, которые могут иметь имя переменной как let
, все равно правильно использовать ее как имя. var
был добавлен с начала Javascript, поэтому почему это запрещено.
let = 0;
console.log(let);
Ответ 3
Javascript имеет набор зарезервированных ключевых слов в ES5:
break, do, instanceof, typeof, case, else, new, var, catch, finally, return, void, continue, for, switch, while, debugger, function, this, with, default, if, throw, delete, in, пытаться
Недопустимо использование зарезервированного ключевого слова в качестве имени переменной или функции в JavaScript. Например, следующий код генерирует SyntaxError, который говорит: " Cannot use the keyword 'delete as a variable name
var delete = 1;
Но его отлично подходит для использования зарезервированных слов ES6, например, как имя переменной в ES5.
var let = 1;
ES5 определяет два modes
для языка. Обычный JavaScript, существовавший до введения ES5, считается sloppy mode
и поскольку ES5, программисты JavaScript могут выбрать свою программу в strict mode
. Строгий режим вводит набор новых правил для JavaScript, включая дополнительные зарезервированные слова. Этот набор ключевых слов называется FutureReservedWord
. Вот список:
инструменты, интерфейс, let, package, private, protected, public, static, yield
Ключевые слова FutureReservedWord не применяются в нестандартном JavaScript. Но в строгом режиме они считаются зарезервированными словами и их незаконными использовать в качестве имен переменных.
Подробнее здесь
Таким образом, вы можете использовать let
как имя переменной, если не в строгом режиме. Но var
- это зарезервированное ключевое слово все время.
Таким образом, вы можете сделать что-то вроде
var let = "some thing uneasy!";
console.log(let);
Ответ 4
На этот вопрос был дан ответ, и просто добавить к нему -
Согласно спецификации, let
и static
не являются частью списка ключевых слов, если не используются в строгом режиме.
В режиме строгого режима let
и static
рассматриваются как зарезервированные ключевые слова через статические семантические ограничения, а не лексическую грамматику.