Проблемы доступности и организации кода в javascript с jquery - PullRequest
1 голос
/ 05 августа 2009

У меня проблемы с порядком кода в моей программе. сейчас у меня есть кое-что с document.ready(function() { } ); и кое-что вне его. Всякий раз, когда я что-то перемещаю (чтобы организовать или улучшить свой код), я заканчиваю тем, что что-то ломаю, полагаю, из-за порядка объявлений или уровней доступа (то есть что-то вне document.ready(function {}); не может получить доступ к чему-то внутри него.

У кого-нибудь есть понимание того, где вещи должны быть расположены в javascript?

Должно ли все быть в пределах document.ready(function() {});?
Есть ли основания иметь что-либо за пределами document.ready(function() {});?
Код внутри document.ready(function() {}); недоступен для внешнего кода?

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

1. Должно ли все быть в пределах document.ready (function () {});?

Нет, я думаю, что функция document.ready должна быть только для инициализации вещей, назначения обработчиков событий и т. Д.

2. Есть ли причина иметь что-нибудь за пределами document.ready (function () {});?

Повторное использование кода и лучшая организация кода.

3. Код внутри document.ready (function () {}); недоступен внешним кодом?

Да, переменные и объекты, созданные в документе. Уже недоступны из внешней области.

0 голосов
/ 05 августа 2009

Должно ли все быть в пределах document.ready (function () {});?

Да и нет. В крупномасштабных приложениях JavaScript я инициализирую свои основные контроллеры в глобальную область из этого обработчика событий. Однако есть код, который не должен ждать готовности DOM, а именно: код, который не зависит от DOM . Я думаю, что это довольно просто. Например, я объявляю классы объектов конфигурации, функции и т. Д. Вне этого обработчика событий.

Есть ли какая-либо причина иметь что-либо за пределами document.ready (function () {});?

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

Кроме того, если вы не включите весь ваш код в один обработчик событий, он станет более организованным, позволит вам модульно кодировать, использовать правильные шаблоны проектирования и т. Д.

Является ли код внутри document.ready (function () {}); недоступен внешним кодом?

Опять да и нет. Если вы объявляете его как локальный с var, тогда это да, он недоступен для внешней области видимости, так как он является локальным для обработчика событий; в противном случае он находится в глобальной области видимости и доступен для внешней области видимости. Вот пример (размещен здесь: http://jsbin.com/uriqe)

JavaScript

var foo = function() {
  alert(global);
  return false;
}

$(document).ready(function() {
  global = "you can see me!?";
  alert("global is initiated");
});

HTML

<body>
  <p><a href="#" onclick="foo()">click me</a></p>
</body>

onclick вместо ненавязчивого вложения метода в $(document).ready() используется намеренно, чтобы избежать любых вопросов / аргументов о том, что foo имеет доступ к global через свойство closure.

Редактировать: Я думал, что ясно дал понять в предыдущем предложении, но onclick используется намеренно, чтобы избежать путаницы между глобальной областью видимости и свойством closure, но I'm не выступает за использование onlick. Конечно, это плохая практика, и вы не должны ее использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...