Asignando "let" un valor en Javascript

8

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); // 2

El 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?

Resucitado
fuente
1
letes una palabra clave, no debe nombrar (o intentar nombrar) variables que. Me sorprende que Chrome incluso te deje (risas) hacer eso.
isick

Respuestas:

10

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.

Tyler Roper
fuente
Gran explicación, muchas gracias! No conocía los diferentes tipos de palabras clave.
Levantado el
5

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 usar letcomo nombre de variable y no var.

Supongo que let = 1 es lo mismo que var let = 1.

No. Es más bien igual someothername = 1y crea una variable global implícita que es muy mala.

Jonas Wilms
fuente