Javascript Avanzado en Español
  • Introducción
  • I- Up & Going
    • 0- Prefacio
    • 1- En la programación
      • 1.1 Código
      • 1.2 Inténtalo tú mismo
      • 1.3 Operadores
      • 1.4 Valores y Tipos
      • 1.5 Comentarios del Código
      • 1.6 Variables
      • 1.7 Bloques
      • 1.8 Condicionales
      • 1.9 Bucles
      • 1.10 Funciones
      • 1.11 Scope (Ámbito)
      • 1.12 Práctica
      • 1.13 - Revisión
    • 2- En Javascript
      • 2.1 Valores y Tipos
      • 2.2 Variables
      • 2.3 Condicionales
      • 2.4 Modo estricto
      • 2.5 Funciones como Valores
      • 2.6 Identificador This
      • 2.7 Prototypes
      • 2.8 Lo Viejo y Lo Nuevo
      • 2.9 Non-JavaScript
      • 2.10 Revisión
    • 3- En YDKJS
      • 3.1 Scope & Closures
      • 3.2 This & Object Prototypes
      • 3.3 Tipos & Gramática
      • 3.4 Async & Performance
      • 3.5 ES6 & Más allá
      • 3.6 Revisión
  • II- Scope & Closures
    • 0- Prefacio
    • 1- ¿Qué es el Scope?
      • 1.1 Teoría del Compilador
      • 1.2 Entendiendo el Scope
      • 1.3 Scopes Anidados
      • 1.4 Errores
      • 1.5 Revisión
    • 2- Lexical Scope
      • 2.1 Tiempo de Lex
      • 2.2 Trucos léxicos
      • 2.3 Revisión
    • 3- Function vs. Block Scope
      • 3.1 Ámbito de las funciones
      • 3.2 Ocultación en el ámbito común
      • 3.3 Funciones como ámbitos
      • 3.4 Bloques como ámbitos
      • 3.5 Revisión (TL; DR)
    • 4- Hoisting
      • 4.1 ¿El Huevo o la Gallina?
      • 4.2 El compilador pega de nuevo
      • 4.3 Funciones Primero
      • 4.4 Revisión
    • 5- Scope Closure
      • 5.1 Ilustración
      • 5.2 Nitty Gritty
      • 5.3 Ahora puedo ver
      • 5.4 Loops + Closure
      • 5.5 Módulos
      • 5.6 Revisión
    • 6- Scope Dinámico
    • 7- Ámbito de bloque de Polyfilling
      • 7.1 Traceur
      • 7.2 Bloques implícitos vs. explícitos
      • 7.3 Rendimiento
    • 8- Lexical-this
  • III- this & Object Prototypes
    • 0- Prefacio
    • 1- this o That?
      • 1.1 ¿Porque this?
      • 1.2 Confusiones
      • 1.3 ¿Que es this?
      • 1.4 Revisión
    • 2- this, todo tiene sentido ahora!
      • 2.1 Sitio de llamada
      • 2.2 Nada más que reglas
      • 2.3 Todo en orden
Powered by GitBook
On this page

Was this helpful?

  1. II- Scope & Closures
  2. 1- ¿Qué es el Scope?

1.4 Errores

¿Por qué importa si lo llamamos LHS o RHS?

Debido a que estos dos tipos de consultas se comportan de manera diferente en las circunstancias en las que la variable aún no ha sido declarada (no se encuentra en ningún ámbito consultado).

Considere:

function foo(a) {
    console.log( a + b );
    b = a;
}

foo( 2 );

Cuando la búsqueda RHS ocurre para b la primera vez, no se encuentra. Se dice que esto es una variable "no declarada", porque no se encuentra en el ámbito.

Si una búsqueda RHS falla al encontrar una variable, en cualquier lugar de los Scopes anidados, esto resulta en un ReferenceError que está siendo lanzado por el Motor. Es importante tener en cuenta que el error es del tipo ReferenceError.

Por el contrario, si el Motor está realizando una búsqueda LHS y llega a la planta superior (ámbito global) sin encontrarlo, y si el programa no se está ejecutando en "modo estricto" [^note-strictmode], entonces el ámbito global creará una nueva variable de ese nombre en el ámbito global y la devolverá al Motor.

"No, no había una antes, pero fui útil y creé una para ti".

El "Modo estricto" [^note-strictmode], que se agregó en ES5, tiene una serie de comportamientos diferentes del modo normal/relajado/perezoso. Una de estas conductas es que no permite la creación de la variable global automática/implícita. En ese caso, no habría ninguna variable Scope'd global a devolver de una búsqueda LHS, y el Motor lanzaría un ReferenceError similarmente al caso RHS.

Ahora, si se encuentra una variable para una búsqueda RHS, pero se intenta hacer algo con su valor que es imposible, como intentar ejecutar como función un valor sin función o hacer referencia a una propiedad en un valor null o undefined , entonces el Motor arroja un tipo diferente de error, llamado TypeError.

ReferenceError es Scope resolution-failure related, mientras que TypeError implica que la resolución Scope tuvo éxito, pero que se ha intentado una acción ilegal/imposible contra el resultado.

Previous1.3 Scopes AnidadosNext1.5 Revisión

Last updated 6 years ago

Was this helpful?