Estaba jugando en las devtools de Chrome y probé el siguiente código:
let = 1;
let x = 2;
console.log(let); // 1
console.log(x); // 2El código anterior no funcionará si reemplazo "let" con "var".
Supongo que let = 1es lo mismo que var let = 1. Si es así, ¿no let x = 2debería traducirse 1 x = 2y, por lo tanto, ser un error?
                    
                        javascript
                                
                    
                    
                        Resucitado
fuente
                
                fuente

letes una palabra clave, no debe nombrar (o intentar nombrar) variables que. Me sorprende que Chrome incluso te deje (risas) hacer eso.Respuestas:
Declara una variable, pero no es lo mismo. La principal distinción aquí es que al omitir una declaración como
var,letoconst, 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 propioglobalobjeto de espacio de nombres que se refiere al módulo actual.No.
let = 1no anula la funcionalidad nativa de laletdeclaració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:
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 usarloletcomo identificador. Como dice MDN en el artículo vinculado, me imagino que será una palabra reservada más pronto que tarde.fuente
Compatibilidad hacia atrás.
letes relativamente nuevo, por lo tanto, no es una palabra clave reservada para no romper los scripts antiguos que lo usan como nombre de variable. Es por eso que puede usarletcomo nombre de variable y novar.No. Es más bien igual
someothername = 1y crea una variable global implícita que es muy mala.fuente