Co to jest obiekt aktywacyjny w JavaScript?

13

W danym kontekście wykonania obiekt Zmienny jest obiektem Aktywacji tego kontekstu wykonania.

Z moich badań online mogę znaleźć poprzednie zdanie przeformułowane na różne sposoby, ale nikt nie jest w stanie powiedzieć, co to jest.

Co to jest obiekt aktywacyjny?

rsman
źródło
Obiekt aktywacyjny to najwyższy obiekt w łańcuchu zasięgu, przy czym najniższy to obiekt globalny . Zobacz tę odpowiedź, aby uzyskać więcej informacji.
ikaruss

Odpowiedzi:

17

Zacznę od korzeni ...

Kontekst wykonania to obiekt, który składa się z:

  • obiekt zmienny, który jest obiektem aktywacji w przypadku funkcji
  • łańcuch zasięgu, który można traktować jako połączoną listę zakresów zewnętrznych
  • this wartość

Obiekt zmienny jest abstrakcyjną rzeczą, którą może być jeden z tych:

  • Globalny obiekt (w kontekście globalnym) - miejsce, w którym globalne Vars (jak window, documentlub consolew przeglądarce) zamieszkują
  • obiekt aktywacyjny (dla funkcji, które definiują zakresy w ECMAScript)

Obiekt aktywacji to obiekt, który zawiera:

  • formalne argumenty funkcji
  • arguments obiekt dla tej funkcji
  • wszelkie zmienne i (nazwane) funkcje wewnątrz tej funkcji

Tak więc obiekt aktywacyjny jest tylko specjalnym przypadkiem obiektu zmiennego.

Jest to w zasadzie pojemnik na wszystkie lokalne rzeczy, do których można uzyskać dostęp po nazwie wewnątrz funkcji, z wyjątkiem this. Być może jestem tu nieprecyzyjny, ale tak myślę.

Więcej wyjaśnień z kilkoma ładnymi zdjęciami:

scriptin
źródło
2

Obiekt aktywacji to obiekt używany do przechowywania właściwości opisujących środowisko i zakres funkcji wykonawczej. W tym obiekcie przechowywane są na przykład argumenty funkcji. Z definicji AKTYWACJA oznacza spowodowanie, że coś zadziała lub FUNKCJA. Kiedy więc usłyszysz „Obiekt aktywacyjny”, pomyśl o obiekcie „FUNKCJA” lub jeszcze lepiej o obiekcie głównym, LOKALNYM dla funkcji (tj. FUNKCJONALNY OBIEKT LOKALNY).

W odniesieniu do obiektu Variable, obiekt Activation jest mniej więcej konkretnym wystąpieniem obiektu Variable, który sam w sobie (odnosząc się do obiektu Variable tutaj) jest typem obiektu ABSTRACT. Jak stwierdzono tutaj ...

Termin „obiekt zmienny” to ogólny lub abstrakcyjny termin używany w odniesieniu do dowolnego obiektu, który posiada właściwości opisujące środowisko i zakres aktualnie wykonywanego kontekstu.

Dlatego w środowisku i zakresie globalnego kontekstu wykonania (tj. Poza funkcją) obiekt globalny jest obiektem zmiennej. W przeglądarce, ponieważ globalnym lub najbardziej zewnętrznym środowiskiem wykonawczym jest WINDOW przeglądarki, jest to windowobiekt, który ostatecznie jest używany jako obiekt Zmienna. Dlatego zmienne zadeklarowane za pomocą varsłowa kluczowego poza funkcjami kończą się na windowobiekcie.

Jednak w zakresie funkcji jest to obiekt aktywacji (tj. Obiekt lokalny funkcji), który jest obiektem zmiennym, ponieważ jest to obiekt, który służy do przechowywania właściwości opisujących zakres funkcji wykonawczej.

ify.io
źródło