Я слышал, что в JavaScript не рекомендуется делать элементы глобальными. Я не понимаю, почему. Это то, с чем IE не может справиться?
Например:
div = getElementById('topbar');
Я слышал, что в JavaScript не рекомендуется делать элементы глобальными. Я не понимаю, почему. Это то, с чем IE не может справиться?
Например:
div = getElementById('topbar');
Я не думаю, что это проблема реализации, а скорее проблема хорошей и плохой практики. Обычно глобальный * является плохой практикой, и его следует избегать (глобальные переменные и т. д.), поскольку вы никогда не знаете, как будет развиваться объем проекта и как будет включен ваш файл.
Я не большой фанат JS, поэтому я не смогу рассказать вам, почему именно события JS плохи, но Кристиан Хейлманн рассказывает о лучших практиках JS здесь, вы можете взглянуть. Также попробуйте поискать в Google "лучшие практики JS"
Изменить: Википедия о глобальных переменных, которые также могут относиться к вашей проблеме:
[глобальные переменные] обычно считаются плохой практикой именно из-за их нелокальности: глобальная переменная потенциально может быть изменена из любого места (если только они не находятся в защищенной памяти), и любая часть программы может зависеть от нее. Таким образом, глобальная переменная имеет неограниченный потенциал для создания взаимных зависимостей, а добавление взаимных зависимостей увеличивает сложность. См. Действие на расстоянии. Однако в некоторых случаях можно использовать глобальные переменные. Например, их можно использовать, чтобы избежать непрерывной передачи часто используемых переменных через несколько функций.
через http://en.wikipedia.org/wiki/Global_variable
Это то, с чем IE не может справиться?
Нет это не IE. Вы никогда не можете предположить, что ваш код будет единственным сценарием, используемым в документе. Поэтому важно убедиться, что в вашем коде нет глобальных функций или имен переменных, которые могут быть переопределены другими скриптами.
Я предполагаю, что под «событиями» вы подразумеваете обработку событий 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, весь код может уживаться.
Не должно быть никаких проблем с использованием глобальных переменных в вашем коде, если вы заключаете их в уникальное пространство имен/объект (чтобы избежать столкновения со сценариями, которые не принадлежат вам)
Основное преимущество использования глобальной переменной в javascript связано с тем, что javascript не является языком строгого типа. поэтому, если вы передадите некоторые сложные объекты в качестве аргументов функции, вы, вероятно, потеряете весь интеллект для этих объектов (внутри области действия функции.) При использовании вместо этого глобальных объектов сохраните этот интеллект.
Я лично нахожу это очень полезным, и это, безусловно, имеет место в моем коде.
(конечно, всегда нужно делать правильный баланс между локалями и глобальными переменными)