|
| 1 | +--- |
| 2 | + |
| 3 | +# SCOPE ( AMBITO ) |
| 4 | + |
| 5 | +El `scope` o ámbito es el conjunto de variables, objetos y funciones a las que tienes acceso. |
| 6 | + |
| 7 | +JavaScript tiene dos ámbitos: `global` y `local`. Una variable que es declarada fuera de la definición de una función es una variable `global`, y su valor es accesible y modificable a través de tu programa. Una variable que es declarada dentro de la definición de una función es una variable `local`. Se crea y se destruye cada vez que se ejecuta la función, y no se puede acceder a su valor ni modificarlo por ningún código fuera de la misma. |
| 8 | + |
| 9 | +Las funciones definidas dentro de otras funciones, conocidas como funciones anidadas, tienen acceso al ámbito de su función padre. |
| 10 | + |
| 11 | +Presta atención a los comentarios en el siguiente código: |
| 12 | + |
| 13 | +```js |
| 14 | +var a = 4; // es una variable global, puede ser accedida por las siguientes funciones |
| 15 | +
|
| 16 | +function foo() { |
| 17 | + var b = a * 3; // b no puede ser accedida por fuera de la función foo, pero puede ser accedida |
| 18 | + // por las funciones definidas dentro de foo |
| 19 | + function bar(c) { |
| 20 | + var b = 2; // otra variable `b` es creada dentro del ámbito de la función bar |
| 21 | + // los cambios a esta nueva `b` no afectan a la vieja variable `b` |
| 22 | + console.log( a, b, c ); |
| 23 | + } |
| 24 | + |
| 25 | + bar(b * 4); |
| 26 | +} |
| 27 | + |
| 28 | +foo(); // 4, 2, 48 |
| 29 | +``` |
| 30 | +IIFE, Immediately Invoked Function Expression( Expresión de Functión Invocada Inmediatamente ), es un patrón común para crear ámbitos locales. |
| 31 | +Por ejemplo: |
| 32 | +```js |
| 33 | + (function(){ // La expresión de la función está entre paréntesis |
| 34 | + // las variables definidas aquí |
| 35 | + // no pueden ser accedidas por fuera |
| 36 | + })(); // la función es inmediatamente invocada |
| 37 | +``` |
| 38 | +## El ejercicio: |
| 39 | +
|
| 40 | +Crea un archivo llamado `scope.js`. |
| 41 | + |
| 42 | +En ese archivo, copia el siguiente código: |
| 43 | +```js |
| 44 | +var a = 1, b = 2, c = 3; |
| 45 | +
|
| 46 | +(function firstFunction(){ |
| 47 | + var b = 5, c = 6; |
| 48 | +
|
| 49 | + (function secondFunction(){ |
| 50 | + var b = 8; |
| 51 | + |
| 52 | + (function thirdFunction(){ |
| 53 | + var a = 7, c = 9; |
| 54 | +
|
| 55 | + (function fourthFunction(){ |
| 56 | + var a = 1, c = 8; |
| 57 | +
|
| 58 | + })(); |
| 59 | + })(); |
| 60 | + })(); |
| 61 | +})(); |
| 62 | +``` |
| 63 | + |
| 64 | +Usa tu conocimiento sobre el ámbito de las variables y ubica el siguiente código dentro de alguna de las funciones |
| 65 | +en `scope.js` para que la salida sea `a: 1, b: 8,c: 6` |
| 66 | +```js |
| 67 | +console.log("a: "+a+", b: "+b+",c: "+c); |
| 68 | +``` |
| 69 | +--- |
0 commit comments