Supongo que let = 1es lo mismo quevar let = 1
Declara una variable, pero no es lo mismo. La principal distinción aquí es que al omitir una declaración como var, leto const, estás declarando esta variable globalmente * (suponiendo que no estás estableciendo una variable previamente declarada). Esto es lo que se conoce como un mundo implícito : un olor a código notorio .
* En la mayoría de los casos, "global" se referiría al windowobjeto, pero este no es siempre el caso. Por ejemplo, Node.js tiene su propio globalobjeto de espacio de nombres que se refiere al módulo actual.
Si es así, ¿no let x = 2debería traducirse 1 x = 2y, por lo tanto, ser un error?
No. let = 1no anula la funcionalidad nativa de la letdeclaración / palabra clave. Simplemente ha creado una variable global del mismo nombre. ( Quizás no hace falta decirlo, ¡pero no hagas esto! )
Y no preguntaste esto específicamente, pero vale la pena abordarlo:
¿Por qué se me permite hacer let = 1pero no var = 1?
vares una palabra clave reservada .
letes una palabra clave reservada futura , lo que significa que actualmente solo está reservada en modo estricto . Eso en mente, si está tratando de escribir código que resista la prueba del tiempo, es mejor no usarlo letcomo identificador. Como dice MDN en el artículo vinculado, me imagino que será una palabra reservada más pronto que tarde.
letes una palabra clave, no debe nombrar (o intentar nombrar) variables que. Me sorprende que Chrome incluso te deje (risas) hacer eso.