Es asi Damelis, Javascript es un lenguaje que nació directamente en la web, y como tal no puede romper funcionalidades que romperían websites antiguos o sin mantenimiento. Pero esa flexibilidad no quiere decir que de lo mismo. Si miras guías de estilo de Javascript de grandes empresas verás como denominador común que prefieren utilizar sobre todo const
para definir variables, let
solo si debe reasignarse y nunca var
. Porque var
tiene un comportamiento que conduce a errores difíciles de depurar en algunos casos.
Ahora, respecto a la declaración implícita de variables (solo con su nombre, sin usar const
, let
ni var
): esto se considera en todo ámbito industrial una mala práctica. Sucede que cuando haces eso, no estás declarando variables propiamente tales, sino más bien "propiedades" del objeto global, que en el browser se llama window. Intenta esto en la 'consola' del navegador:
let a = 12; // no asociado al objeto global
b = 12; // asociado al objeto global
window.a // undefined
window.b // 12
Ahora, el punto es. Bueno ¿y eso que importancia tiene? El punto acá es que el objeto global tiene una gran cantidad de propiedades, y es posible que sin querer tu código, al intentar ser semántico declare variables como Math
,close
, find
u otros que parecen tener mucho sentido pero que entonces sobre escribirán metodos o propiedades del objeto global que representa tu browser, un ejemplo que puedes probar en la consola de desarrollo:
alert = function(mensaje) { // esto es igual que declarar window.alert
console.log(mensaje);
}
alert('me han hackeado el browser');
como verás, 'sin querer' hemos sobreescrito una funcionalidad que está presente en el objeto global (window = la ventana del browser) y ya alert no funciona como queremos. Por eso, siempre declara tus variables.