Estás preguntando por varios conceptos diferentes que no están muy estrechamente relacionados. Trataré de abordar brevemente cada uno.
contexto de ejecución es un concepto en la especificación de lenguaje que — — en términos sencillos equivale aproximadamente al 'medio ambiente' en una función ejecuta; es decir, ámbito de variable (y la cadena de ámbito , variables en cierres desde ámbitos externos), argumentos de función y el valor del objeto this
.
La pila de llamadas es una colección de contextos de ejecución.
Vea también this answer y this article.
Alcance es literalmente que: el alcance en el que se puede acceder a una variable. Simplista:
var x;
function a() {
var y;
}
x
se puede acceder desde cualquier lugar. Cuando se invoca a
, x
estará en el ámbito externo. (Almacenado en la cadena alcance.)
En contraste, y
sólo se puede acceder por código en a()
porque se limita a alcance a
's. Esto es lo que hace la palabra clave var
: restringe una variable al alcance local. Si omitimos var
, y
terminaría en el alcance global , generalmente considerado como algo malo.
Piense en de elevación a medida que más de una cosa en tiempo de compilación. En JavaScript, las declaraciones de función se "levantan" al principio de su ámbito. En otras palabras, se analizan y evalúan antes de cualquier otro código. (Esto se opone a la función expresiones, que se evalúan en línea.) Considere lo siguiente:
a();
b();
function a() { }
var b = function() { }
La llamada a a()
tendrá éxito debido a que su declaración fue izada a la parte superior; a
se asignó automáticamente antes de que comenzara la ejecución del programa. La llamada a b()
fallará con un TypeError
porque b
no se definirá hasta la línea 4.
Probablemente necesite definir ** Contexto de ejecución ** – jondavidjohn
@jondavidjohn: * El contexto de ejecución * tiene un significado específico dentro de [ECMA-262] (http://bclary.com/2004/11/07/#a- 10). – josh3736
@ josh3736 gracias! – jondavidjohn