Escopo en JavaScript


Todo el mundo sabe que una variable local es... local:
function(){ var i = 0; } alert(i); // no funciona
¿Pero eso es todo?
if (algunaCosa){ var i = 0; } alert(i);
¿Una variable declarada dentro del if
será visible fuera de él? ¡Sí!
JavaScript solo tiene alcance de función (escopo de función) y escopo global( alcance global). No tiene alcance de bloque. Es decir, if
no define un ámbito aislado.
Debes tener cuidado de no confundirte en algunos escenarios. Por ejemplo, dos for
simples:
for (var i = 0; i < 10; i++) { ... }
for (var i = 10; i > 0; i--) { ... }
Ambos están jugando con la misma variable i
, después de todo, for
tampoco define un alcance o escopo. Debemos tener cuidado de no cometer estos errores.
El nuevo ES6 FINALMENTE define el alcance del bloque o escopo de bloque en el lenguaje. Es con la palabra clave let
:
if (algunaCosa){ let i = 0; } alert(i);
Es bueno saberlo, pero el soporte aún es débil en todos los navegadores.

Sérgio Lopes
Sérgio es director y jefe de squad de varios equipos del Grupo Caelum, graduado en Informática por la USP. Es reconocido por su trabajo en Front-end, Performance, Mobile y Arquitectura de Software y cuenta con una amplia experiencia en la docencia, tanto presencial como online. Gestiona los proyectos internos de la empresa y trabaja en la definición del rumbo de los productos y de la empresa en general.
Este articulo fue adecuado para Alura Latam por: Jose Charris