1.17 Ambito/Scope

Si le pregunta a la empleada de la tienda de telefonos por el modelo de un telefono que su tienda no tiene, elle no tendra la posibilidad de venderle es telefono que usted quiere. Ella solo tiene acceso a los telefonos de la tienda de su inventario. Usted tendra que intentar en otra tienda para ver si puede encontrar el telefono que usted esta buscando.

La programacion tiene un termino para este concepto: ambito/alcanze. En JavaScript, cada funcion tiene su propio ambito. El ambito son basicamente una coleccion de variables, asi como reglas de como estas variables son accedidas por su nombre. Solo el codigo dentro de esa funcion puede acceder al ambito de las variables de esta funcion.

El nombre de una variable tiene que ser unico dentro del mismo ambito -- no pueden haber dos variables a diferentes ubicados una al lado de otra. Pero la misma variable a puede aparecer en distintos ambitos.

function one() {
  // esta 'a' solo pertenece a la funcion 'one()'
  var a = 1;
  console.log( a );
}

function two() {
  // esta 'a' solo pertenece a la funcion 'two()'
  var a = 2;
  console.log( a );
}

one();      // 1
two();      // 2

Tambien, un ambito puede ser anidado en otro ambito, como si un payaso en una fiesta de cumpleaños inflara una bomba dentro de otra bomba. Si un ambito es anidado dentro de otro, el codigo dentro de este ambito mas interno puede acceder a las variables de cualquiera de los dos ambitos ambito.

Considere:

function outer() {
    var a = 1;

    function inner() {
        var b = 2;
        // aqui podemos acceder a ambas, 'a' y 'b'
        console.log( a + b );   // 3
    }

    inner();

    // aqui solo podemos acceder a 'a'
    console.log( a );           // 1
}

outer();

Las reglas de los ambitos dicen que el codigo en un ambito puede acceder a cualquiera de las variables de su ambito o cualquer ambito fuera de ella.

Asi, que el codigo detro de la funcion inner() tiene acceso a ambas variables a y b, pero solo el codigo dentro de outer() tiene acceso a a -- esta no puede acceder a b ya que esta variable esta solo dentro del ambito de inner().

Recordemos un fragmento de codigo anterior

const TAX_RATE = 0.08;

function calculateFinalPurchaseAmount(amt) {
    // Calcular el nuevo valor con los impuestos
    amt = amt + (amt * TAX_RATE);

    // retorna el nuevo valor
    return amt;
}

La constante TAX_RATE es accesible desde dentro de la funcion calculateFinalPurchaseAmount(..), apesar que no se la pasemos, por su ambito lexico.

Nota: Para mas informacion acerca del ambito lexico, ver los tres primeros capitulos Ambitos & Cierres.

results matching ""

    No results matching ""