Po utworzeniu funkcji są one kompilowane w czasie wykonywania. Funkcja jest wywoływana, gdy je wywołujesz.
Pozwól mi wyjaśnić trochę:
Możesz mieć dowolną liczbę funkcji i kontekstów każdej funkcji rozmowę tworzy nowy kontekst.
//Global Context
var helloWorld = "hello world!";
function foo(){//execution context
function bar(){//execution context
console.log('bar');
}
}
foo();
Więc w foo powyżej funkcji kod jest nazywany, i tworzy nowy kontekst dla funkcji foo i kontekstu wykonania na pasku jest stworzony tylko po to nazwać, ale to jest skompilowany już w czasie wykonywania.
Po pierwszym załadowaniu skryptu przez przeglądarkę domyślnie wprowadza globalny kontekst wykonania. Jeśli wywołujesz funkcję w zasięgu globalnym, sekwencyjny przepływ twojego programu wchodzi do wywoływanej funkcji, tworząc nowy kontekst wykonania i przesuwając ten kontekst na szczyt stosu wykonawczego.
Teraz mają szczegółów na temat kontekstu wykonanie:
Tak, za każdym razem wywoływana jest funkcja, nowy kontekst wykonanie jest tworzony. Każde wywołanie kontekście realizacji ma 2 etapy: etap
1. utworzenia:
Po wywołaniu funkcji, ale zanim to wykonuje dowolny kod wewnątrz są: tworzenie łańcucha zakres, tworzenie zmiennych, funkcji i argumentów i określ wartość "tego".
2. stopień aktywacji:
przypisać wartości odniesienia do funkcji i wykonuje kod.
Now, let's have a bit more knowledge of execution context:
function foo (a, b, c) {
function z(){alert(‘Z!’);}
var d = 3;
}
foo(‘foo’,’bar’);
ExecutionContext w foo() połączenia: Etap 1: argumenty powstaje
ExecutionContext: {
arguments: {
0: ‘foo’, 1: ‘bar’,
length: 2, callee: function() //Points to foo function
}
}
Etap 3a: zmiennej instancji, argumenty
ExecutionContext: {
arguments: {
0: ‘foo’, 1: ‘bar’,
length: 2, callee: function() //Points to foo function
},
a: ‘foo’, b: ‘bar’, c: undefined
}
Etap 3b: zmienna instancji, funkcje
ExecutionContext: {
arguments: {
0: ‘foo’, 1: ‘bar’,
length: 2, callee: function() //Points to foo function
},
a: ‘foo’, b: ‘bar’, c: undefined,
z: function() //Created z() function
}
Etap 3c: Zmienna instancji zmienne
ExecutionContext: {
arguments: {
0: ‘foo’, 1: ‘bar’,
length: 2, callee: function() //Points to foo function
},
a: ‘foo’, b: ‘bar’, c: undefined,
z: function(), //Created z() function,
d: undefined
}
Etap 4: Ustawiono wartość
ExecutionContext: {
arguments: {
0: ‘foo’, 1: ‘bar’,
length: 2, callee: function() //Points to foo function
},
a: ‘foo’, b: ‘bar’, c: undefined,
z: function(), //Created z() function,
d: undefined,
this: window
}
Po utworzeniu ExecutionContext funkcja rozpoczyna uruchamia swój kod z pierwszej linii, dopóki nie znajdzie zwrotu lub funkcja się zakończy. Za każdym razem, gdy ten kod próbuje uzyskać dostęp do zmiennej, jest on odczytywany z obiektu ExecutionContext.
Jakie są wasze ** ** odpowiedzi (lub nawet domysły)? To wygląda na pytanie quizowe. – Pointy
To pytanie jest prosto z mojego mózgu. Czy to wygląda na pytanie z quizu? – Ben
Cóż, bez większego kontekstu, czyta się to jak coś, co byłoby na zadanie domowe, ale sprawiedliwe; jeśli powiesz, że tak nie jest, to nie jest. :) – Pointy