No entiendo por qué se puede reasignar una variable var dentro de una función, pero el cambio también se aplica fuera de la función. ¿Por qué/Cómo?
var c = 1; function Fn() { c = 2; } Fn(); c; // 2 ¿Por qué el valor 2 no está limitado al alcance de la función? Cuando escribo c = 2 dentro de una función, ¿el motor de javascript levanta automáticamente una nueva var c fuera de la función y le asigna el valor undefined , que luego se cambia a 2 una vez que se llama a Fn() ?
Se aplica fuera de la función porque, dentro de la función, estás cambiando la variable .
No está creando una nueva variable que existe solo dentro de la función.
¿Por qué el valor 2 no está limitado al alcance de la función?
No usó var , let , const ni ningún otro método para crear una variable en el ámbito de la función.
Está accediendo a la variable que ya creó en el ámbito más amplio.
Cuando escribo c = 2 dentro de una función, ¿el motor de javascript levanta automáticamente una nueva var c fuera de la función y le asigna el valor indefinido, que luego se cambia a 2 una vez que se llama a Fn()?
No. No hay una nueva variable. Solo existe la c que ya creó fuera de la función.
Esta es una queja común sobre javascript. Dado que usó "Var", tiene un alcance global, por lo que aunque esté dentro de una nueva función cuando use c=2 , dado que ya está definido globalmente, se cambia globalmente. Usar "Let" ayuda a definir cosas locales a la función y "const" define globales como constantes para que no se puedan cambiar. Este problema es particularmente divertido cuando tiene dos variables globales con el mismo nombre en diferentes archivos JavaScript y luego hace referencia a ambos archivos para usarlos en una página. Los valores globales deben usarse con precaución.