Существует несколько проблем с использованием переменных в глобальном.
window
является глобальным.
Вот пример, почему это опасно.
window.item = {
name: 'Something great'
};
function selectItem() { //wrong line
item.name = 'selected';
}
selectItem(event.target);
Как видите, разработчик забыл добавить аргумент item
для функции selectItem
.Ожидается, что изменится название выбранного элемента, но глобальный элемент будет изменен.
this
=
window
,
this
равно
window
, если вы не используете
строгий режим .
Давайте рассмотрим тот же пример, но на этот раз мы будем использовать контекст.
function selectItem() {
this.name = 'selected'
}
const item = {
name: 'An item'
}
selectItem.call(item); //Assume that item is somehow undefined or null.
Снова тот же результат, window.name
будет изменено.
global для global, инкапсулируйте его.
Я могу легко получить доступ к window
и его переменным.Я также могу определить ту же переменную, что и вы.Или я могу получить доступ к вашим переменным, и это будет проблемой безопасности.
Тестирование
Вы не можете легко протестировать то, что имеет переменную в глобальном.Потому что он не инкапсулирован в вашу сферу.
В глобальном масштабе сборщик мусора отсутствует.Я предполагаю, что опасность достаточно ясна.
Чтобы ответить на ваши вопросы:
- Читать выше
- Читать выше
- Эта строка имеетпубличная собственность.Это не глобально.Это не определено в окне.Это будет свойство экземпляра.