Alcance de JavaScript

Aprenda los conceptos básicos de JavaScript Scope

El alcance es el conjunto de reglas que se definen en un lenguaje de programación para determinar el valor de una variable.

Usos de JavaScriptalcance léxico, lo que significa que el valor de una variable se define por su posición cuando se escribe. No cuando se llama, que es algo que pasa con la alternativa,alcance dinámico.

El alcance es el conjunto de variables visibles para una parte del programa.

Tenemos un alcance global, alcance de bloque y alcance de función. Si una variable se define fuera de una función o bloque, se adjunta al objeto global y tiene un alcance global, lo que significa que está disponible en todas las partes de un programa.

Hay una diferencia muy importante entrevar,letyconstdeclaraciones.

Una variable definida comovardentro de una función solo es visible dentro de esa función. Al igual que los parámetros de función.

Una variable definida comoconstoletpor otro lado, solo es visible dentro de ese bloque donde reside.

Es importante comprender que un bloque (identificado por un par de llaves) no define un nuevo alcance paravar, pero lo hace porletyconst. Un nuevo alcance paravarsolo se crea cuando se crea una función, porquevarno tiene alcance de bloque, sino alcance de función.

Dentro de una función, cualquiervarLa variable definida en él es visible en todo el código de la función, incluso si la variable se declara al final de la función, aún se puede hacer referencia al principio, porque JavaScript antes de ejecutar el código en realidadmueve todas las declaraciones de variables en la parte superior(algo que se llamalevantando). Para evitar confusiones, declare siemprevarvariables al comienzo de una función.

Esto es lo que quiero decir. Incluso si declaras unvarvariable al final de una función, su declaración se mueve a la parte superior:

function run() {
  console.log(`${name}`)
  var name = 'Flavio'
}

run()

Esto imprime "indefinido", porque lo que realmente sucede es:

function run() {
  var name;
  console.log(`${name}`)
  name = 'Flavio'
}

run()

letyconstno “sufra” por izar. Si usa uno de ellos en el ejemplo anterior, obtendrá un error:ReferenceError: name is not defined.

En JavaScript, las variables de una función principal también están disponibles para funciones internas. El alcance de una función interna también incluye el alcance de una función principal, y esto se llama cierre (hablaremos más extensamente sobre esto más adelante).

Hay una pequeña cosa que debes tener en cuenta. En modo no estricto, si usa una variable sin declararla, donde sea que lo haga, esa variable se adjuntará al alcance global. Lo que puede ser una mala fuente de errores. Por lo tanto, asegúrese de declarar siempre las variables antes de usarlas. Solo tenga en cuenta esto, pero es solo otra razón para usar el modo estricto de forma predeterminada, lo que resuelve este problema. Hablaremos del modo estricto más tarde.

Recuerde: cualquier variable definida en una función (o bloque) con el mismo nombre que una variable global tiene prioridad sobre la variable global, sombreándola.

Esto imprimeundefined:

var name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) var name = ‘Flavio’ }

run()

y esto genera un errorReferenceError: name is not defined:

let name = 'Roger'

function run() { console.log(</span><span style="color:#e6db74">${</span><span style="color:#a6e22e">name</span><span style="color:#e6db74">}</span><span style="color:#e6db74">) let name = ‘Flavio’ }

run()


Más tutoriales de js: