# 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:

```javascript
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 u`ndefined` , 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://daniel-morales.gitbook.io/javascript-avanzado-en-espanol/ii-scope-and-closures/1-que-es-el-scope/14-errores.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
