Являются ли термины «глобальное свойство» и «глобальная переменная» синонимами?

Глобальный объект служит лексической средой верхнего уровня (вершина цепочки областей действия, если хотите). Это означает, что глобальные свойства могут быть доступны через прямые ссылки (например, переменные):

// global code
this.foo = 1;        // creating a global property
foo                  // accessing the global property via a direct reference

Это также означает, что к глобальным переменным можно получить доступ через ссылки на свойства:

// global code
var foo = 1;         // creating a global variable
this.foo             // accessing the global variable via a property reference
ИНТЕРПРЕТАЦИЯ 1

Теперь, исходя из вышеприведенной информации, может показаться целесообразным использовать термины "глобальная переменная " "глобальная собственность " взаимозаменяемо, что означает, что оба терминапредставляют точно такой же набор глобальных привязок.

Однако между глобальной переменной, созданной с использованиемvar ,например.var foo = 1;и глобальное свойство, созданное посредством присваивания, например, :this.foo = 1;

Глобальные переменныестатически ограниченныйтогда как глобальные свойствадинамически добавляется к глобальной среде:

foo // => undefined
bar // throws ReferenceError

var foo = 1;
this.bar = 1;

Итак, глобальные переменные связаныдо оценка программы, тогда как глобальные свойства связаныв течение оценка программы, когда задание оценивается.

Глобальные переменные не конфигурируемы, то есть они не могут быть удалены (более конкретно, их соответствующие привязки не могут быть впоследствии удалены из среды), в то время как глобальные свойства создаются посредством присваиванияявляются настраивается.

// 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

При этом следует отметить, что можно создавать неконфигурируемые глобальные свойства:

Object.defineProperty( this, 'bar', { value: 1 }); // non-configurable by default
ИНТЕРПРЕТАЦИЯ 2

Теперь, основываясь на этой новой информации, можно сказать, что только глобально привязанные статически области могут называться как глобальными свойствами, так и глобальными переменными, тогда как динамически добавляемые глобальные привязки являются просто глобальными свойствами, но не глобальными переменными, что означает, что термин "глобальная переменная " представляет собойподмножество из набора, представленного термином "глобальная собственность ", как в:

Все глобальные переменные являются глобальными свойствами

Только статически ограниченные глобальные свойства являются глобальными переменными

Итак, какая интерпретация верна? Представляют ли оба термина один и тот же набор привязок или один является подмножеством другого?

ВОПРОС

Я понимаю терминглобальная собственность " - глобальное свойство - это свойство глобального объекта. Тем не менее, термин "глобальная переменная " по-видимомудвусмысленный, Некоторые используют его как синонимглобальная собственность "в то время как другие определяют его как глобальное свойство, которое было определено черезvar заявление. Цель моего вопроса - определить, какое из этих двух значений является правильным

Ответы на вопрос(2)

Ваш ответ на вопрос