Czy terminy „własność globalna” i „zmienna globalna” są synonimami?
Obiekt globalny służy jako środowisko leksykalne najwyższego poziomu (na górze łańcucha zasięgu, jeśli chcesz). Oznacza to, że dostęp do właściwości globalnych można uzyskać poprzez bezpośrednie odwołania (takie jak zmienne):
// global code
this.foo = 1; // creating a global property
foo // accessing the global property via a direct reference
Oznacza to również, że do zmiennych globalnych można uzyskać dostęp poprzez odwołania do właściwości:
// global code
var foo = 1; // creating a global variable
this.foo // accessing the global variable via a property reference
INTERPRETACJA 1Teraz, opierając się na powyższych informacjach, wydaje się, że właściwe byłoby używanie terminów „zmienna globalna” jako „własność globalna” zamiennie, co oznacza, że oba terminyreprezentują dokładnie ten sam zestaw powiązań globalnych.
Istnieją jednak dwie różnice między tworzoną zmienną globalnąvar
,na przykład.var foo = 1;
oraz globalna własność utworzona poprzez przypisanie, np.this.foo = 1;
:
Zmienne globalne tostatycznie ograniczony, podczas gdy właściwości globalne sądynamicznie dodawane do globalnego środowiska:
foo // => undefined
bar // throws ReferenceError
var foo = 1;
this.bar = 1;
Zatem zmienne globalne są powiązaneprzed ocena programu, podczas gdy właściwości globalne są powiązanepodczas ocena programu, gdy zadanie jest oceniane.
Zmienne globalne nie są konfigurowalne, tj. Nie można ich usunąć (dokładniej, odpowiadających im powiązań nie można później usunąć ze środowiska), podczas gdy właściwości globalne utworzone za pomocą przypisaniasą konfigurowalny.
// the names "foo" and "bar" are bound to the global environment
var foo = 1;
this.bar = 1;
// the binding "bar" can be removed from the global environment subsequently
delete this.bar;
// the binding "foo" cannot be removed subsequently
Należy jednak zauważyć, że możliwe jest tworzenie nie konfigurowalnych właściwości globalnych:
Object.defineProperty( this, 'bar', { value: 1 }); // non-configurable by default
INTERPRETACJA 2Teraz, w oparciu o te nowe informacje, można powiedzieć, że tylko powiązania globalne o zasięgu statycznym mogą być określane zarówno jako właściwości globalne, jak i zmienne globalne, podczas gdy dynamicznie dodawane powiązania globalne są jedynie właściwościami globalnymi, ale nie zmiennymi globalnymi, co oznacza, że termin „globalny zmienna „reprezentujepodzbiór zestawu reprezentowanego przez termin „własność globalna”, jak w:
Wszystkie zmienne globalne są właściwościami globalnymi
Tylko właściwości globalne o zasięgu statycznym są zmiennymi globalnymi
Która interpretacja jest prawidłowa? Czy oba terminy reprezentują ten sam zestaw powiązań, czy też jeden z nich jest podzbiorem drugiego?
PYTANIERozumiem termin „własność globalna” - właściwość globalna jest własnością obiektu globalnego. Jednak termin „zmienna globalna” wydaje się byćdwuznaczny. Niektórzy używają go jako synonimu „globalnej własności”, podczas gdy inni definiują ją jako globalną właściwość, która została zdefiniowana przez avar
komunikat. Celem mojego pytania jest określenie, które z tych dwóch znaczeń jest poprawne