Jquery - область внутри $(document).ready()?

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

Каждое содержимое файла заверяется в:

$(document).ready(function(){
    //some javascript here
});

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

Например, в одном файле у меня была куча кода для создания таблиц из данных, полученных через ajax. Тем не менее, половина файла была просто шаблоном для отображения данных в зависимости от типа и т.д. Я хотел бы иметь шаблоны в их собственном файле.

Я понимаю, что это всего лишь проблема "предпочтения" и что я могу просто использовать все это в одном файле.

Но я надеюсь извлечь из этого и, возможно, даже иметь возможность "по-моему".

Ответы

Ответ 1

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

Идеальное решение для этого - создать пространство имен.

var NS = {};

(function(){
  function privateFunction() { ... }
  NS.publicFunction = function(){ ... }
})();

$(document).ready(function(){
  NS.publicFunction();
});

Это также полезный шаблон, поскольку он позволяет проводить различие между частным и общедоступным элементами.

Ответ 2

Это проблема с областью. Например:

function a() {
   var myHiddenStr = 'abc';
}
alert(typeof(myHiddenStr));

Вы не можете получить доступ к myHiddenStr вне функции a. Аналогичным образом анонимная функция, которую вы используете для готового документа, скрывает все в ней.

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