Должно ли все быть в пределах 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
. Конечно, это плохая практика, и вы не должны ее использовать.