Почему плохо делать элементы глобальными переменными в Javascript? - PullRequest
0 голосов
/ 27 апреля 2009

Я слышал, что не стоит делать глобальные элементы в JavaScript. Я не понимаю почему. Это то, что IE не может обработать?

Например:

    div = getElementById('topbar');

Ответы [ 4 ]

7 голосов
/ 27 апреля 2009

Я не думаю, что это проблема реализации, но скорее проблема хорошей или плохой практики. Обычно глобальный * - это плохая практика, и его следует избегать (глобальные переменные и т. Д.), Поскольку вы никогда не знаете, как будет развиваться область проекта и как будет включен ваш файл.

Я не большой фанат JS, поэтому я не смогу рассказать вам, почему именно события JS плохие, но Кристиан Хейлманн расскажет о лучших практиках JS здесь смотреть. Также попробуйте поискать в Google "JS Best Practices"

Редактировать: Википедия о глобальных переменных, которые также могут относиться к вашей проблеме:

[глобальные переменные] обычно считается плохой практикой именно из-за их нелокальности: глобальный переменная потенциально может быть изменена откуда угодно (если только они не проживают в защищенная память) и любая часть Программа может зависеть от этого. Глобальный следовательно, переменная имеет неограниченный потенциал для создания взаимного зависимости и добавление взаимных зависимости увеличивает сложность. Увидеть Действие на расстоянии. Однако в В некоторых случаях глобальные переменные могут быть подходит для использования. Например, они может быть использован, чтобы избежать необходимости проходить часто используемые переменные постоянно на протяжении нескольких функций.

через http://en.wikipedia.org/wiki/Global_variable

4 голосов
/ 27 апреля 2009

Это то, что IE не может обработать?

Нет это не вещь IE. Вы никогда не можете предполагать, что ваш код будет единственным скриптом, используемым в документе. Поэтому важно убедиться, что в вашем коде нет глобальных имен функций или переменных, которые другие скрипты могут переопределять.

См. Играйте хорошо с другими для примеров.

2 голосов
/ 27 апреля 2009

Я предполагаю, что под "событиями" вы подразумеваете JavaScript (функции) для обработки событий.

Как правило, в JS использовать более одной глобальной переменной не рекомендуется. (Невозможно не использовать хотя бы один, если вы храните какие-либо данные для будущего использования.) Это потому, что он сталкивается с той же проблемой, что и все пространство имен , которое пытается решить - что если вы написали метод doSomething ( ) а кто-то еще написал метод doSomething ()?

Лучший способ обойти это - создать глобальную переменную, которая будет объектом для хранения всех ваших данных и функций. Например:

var MyStuff = {};
MyStuff.counter = 0;
MyStuff.eventHandler = function() { ... };
MyStuff.doSomething = function() { ... };

// Later, when you want to call doSomething()...
MyStuff.doSomething();

Таким образом, вы минимально загрязняете глобальное пространство имен; вам нужно только беспокоиться, что кто-то еще использует вашу глобальную переменную.

Конечно, ничто из этого не является проблемой, если ваш код никогда не будет играть с чьим-либо еще ... но такого рода мышление укусит вас в задницу позже, если вы когда-нибудь будете использовать чужой код. Пока все играют хорошо с точки зрения глобальных имен JS, весь код может уживаться.

1 голос
/ 15 июля 2012

Не должно быть никаких проблем с использованием глобальных переменных в вашем коде, если вы заключаете их в уникальную область имен / объект (чтобы избежать столкновения со скриптами, которые не являются вашими)

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

Лично я нахожу это очень полезным, и это, безусловно, имеет место в моем коде.

(конечно же, всегда нужно найти правильный баланс между локалями и глобальными переменными)

...