Почему 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 рассматриваются как зарезервированные ключевые слова через статические семантические ограничения, а не лексическую грамматику.