Estou assumindo que let = 1é o mesmo quevar let = 1
Declara uma variável, mas não é a mesma. A maior diferença aqui é que ao omitir uma declaração como var, letou const, você está declarando esta variável globalmente * (supondo que você não está definindo uma variável previamente declarada). Isso é conhecido como um global implícito - um notório cheiro de código .
* Na maioria dos casos, "global" se refere ao windowobjeto, mas esse nem sempre é o caso. Por exemplo, o Node.js possui seu próprio globalobjeto de espaço para nome que se refere ao módulo atual.
Nesse caso, não deve let x = 2ser traduzido para1 x = 2 e, portanto, deve ser um erro?
No. let = 1não substitui a funcionalidade nativa da letdeclaração / palavra-chave. Você acabou de criar uma variável global com o mesmo nome. ( Talvez seja necessário dizer, mas não faça isso! )
E você não perguntou isso especificamente, mas vale a pena abordar:
Por que tenho permissão para fazer, let = 1mas nãovar = 1 ?
var é um palavra-chave reservada .
leté uma palavra-chave reservada futura , o que significa que atualmente ela está reservada apenas no modo estrito . Isso, se você estiver tentando escrever um código que resista ao teste do tempo, é melhor não usá-lo letcomo identificador. Como a MDN afirma no artigo vinculado, eu imagino que será uma palavra reservada mais cedo ou mais tarde.
leté keyword, você não deve nomear (ou tentar nomear) variáveis que. Estou surpreso que o Chrome até deixe (lol) você fazer isso.