Имеет ли значение порядок javascript на странице? - PullRequest
2 голосов
/ 24 августа 2009

Пока я вызываю свой код JavaScript изнутри jquery $ (). Ready (); функция не должна ли я иметь доступ ко всем переменным, объявленным в моем коде JavaScript?

У меня есть код, полученный из файлов .js и встроенный.

Я пытался получить доступ к переменной, и она говорит, что она не определена, но когда я делаю источник просмотра, я вижу эту переменную.

Ответы [ 6 ]

6 голосов
/ 24 августа 2009

Порядок javascript действительно имеет значение. Javascript выполняется линейно на странице, поэтому, если у вас есть два тега <script>, например:

<script src="test1.js"></script>
<script src="test2.js"></script>
Сначала будет загружен и запущен

test1.js, затем test2.js. Все, что объявлено глобально в test1.js, будет доступно во втором сценарии, но не наоборот.

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

Внутри события «готово» в jquery вы теоретически должны иметь доступ ко всему, что было загружено как часть DOM, поскольку это не должно сработать технически до того, как структура DOM будет полностью построена.

4 голосов
/ 24 августа 2009

Вам не обязательно иметь доступ к переменной. Это действительно будет зависеть от области действия переменной и от того, где она определена относительно того, где она используется. Если переменная определена в отдельном блоке ready (), у вас может не быть к ней доступа, даже если она находится в глобальном пространстве, если этот блок ready запускается после того, на который вы ссылаетесь. Чтобы быть доступным, код, который определяет переменную, должен выполняться перед кодом, который ссылается на нее, и он должен находиться в той же области видимости.

1 голос
/ 24 августа 2009

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

1 голос
/ 24 августа 2009

Нет, вы всегда должны загружать Javascript в том порядке, в котором это необходимо. Если вы используете некоторые плагины jQuery, то вам следует загрузить jQuery перед этими плагинами, поскольку они могут создавать экземпляры чего-то, что использует объект (ы) jQuery без вашего ведома.

Для моих веб-приложений я загружаю javascripts в следующем порядке:

  • Внешние библиотеки (jQuery, Prototype, ExtJS)
  • Плагины, которые собираются из этих библиотек
  • Мои пользовательские JavaScript

Надеюсь, мой ответ был полезен.

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

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

Josh

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

Да, вы можете получить доступ ко всем переменным верхнего уровня. Но тот, который вы ищете, может быть определен с использованием события dom ready, даже если это переменная окна, обработчик может быть запущен после вашей. Или это в файле JavaScript динамически вводится.

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