jQuery работает между & script & gt; теги, но не в файле .js [дубликат]

Non-prototype версия toHHMMSS:

    function toHHMMSS(seconds) {
        var sec_num = parseInt(seconds);
        var hours   = Math.floor(sec_num / 3600);
        var minutes = Math.floor((sec_num - (hours * 3600)) / 60);
        var seconds = sec_num - (hours * 3600) - (minutes * 60);        
        if (hours   < 10) {hours   = "0"+hours;}
        if (minutes < 10) {minutes = "0"+minutes;}
        if (seconds < 10) {seconds = "0"+seconds;}
        var time    = hours+':'+minutes+':'+seconds;
        return time;
    }   
0
задан Omari Victor Omosa 25 March 2016 в 22:55
поделиться

4 ответа

Размещение сценариев указывает зависимости: если скрипту A нужны некоторые значения из сценария B, тогда сценарий B помещается выше скрипт A. Например: для какого-то JavaScript требуется jQuery, поэтому вы помещаете jQuery выше любого скрипт, который этого требует.

Это потому, что скрипты выполняются сверху вниз.

Некоторые сценарии требуют загрузки DOM, например они работают с некоторыми элементами HTML, то есть они используют document.getElementById или $("selector"). В этих случаях HTML-скрипты требуются скрипту, поэтому эти элементы должны быть выше требуемого им JavaScript, или, другими словами, JavaScript, для которого требуются некоторые элементы HTML ниже .

Существуют другие варианты решения этой проблемы, например используя window.addEventListener("DOMContentLoaded", function(){ ... }) или jQuery $(document).ready(function(){ ... }). Эти опции добавляют слушателей событий, которые запускают позже , при каждом запуске события.

Другим, более новым вариантом является атрибут defer .

Подробнее в Почему метод jQuery или DOM, такой как getElementById, не находит элемент? .

Иногда скрипты также помещаются внизу для загрузки содержимого страницы быстрее, потому что скрипты должны быть загружены, а содержимое загружается только после скриптов. Вы можете использовать атрибут async в качестве альтернативы этому.

2
ответ дан Xufox 24 August 2018 в 23:47
поделиться

JavaScript - это однопоточная среда программирования. При загрузке нескольких сценариев в верхней части тега заголовка остальные теги скрипта под ним блокируются до тех пор, пока не загрузится этот тег скрипта. Если один тег сценария не может быть загружен, то все остальные из них застряли ... пока браузер не истечет для этого тега скрипта. Чтобы обойти эту проблему блокировки, разработчики перемещали теги скриптов в нижней части веб-страницы за последние несколько лет.

Проблема действительно заметна, когда на сайте много JS-файлов, которые находятся в верхней части страницы & amp; загружаются с 3-го, 4-го, 5-го, до N-го партийных серверов поставщиков рекламы. Когда сервер поставщика рекламы отправляется в автономный режим, где их объявления больше не могут обслуживаться, что случается довольно часто - тогда JS на странице сидит & amp; ожидает от браузера тайм-аута. Это заставляет страницу застревать во время загрузки. Это создает плохой опыт работы с пользователем.

Трюк разработчика движущихся тегов скрипта в нижней части страницы помогает облегчить эти 2 проблемы. Это также ускоряет загрузку веб-страниц и amp; быть доступным раньше для пользователей и amp; поиск ботов. Поскольку боты поисковых систем заботятся о времени загрузки страницы, они могут повысить производительность веб-сайтов, когда их веб-страницы загружаются быстро.

Поэтому важно по возможности перемещать теги скриптов в нижней части страницы.

1
ответ дан Clomp 24 August 2018 в 23:47
поделиться

Я нашел два старых ответа на переполнение стека по этой теме.

Вверх: Когда функция JavaScript событий на элементах сразу становится более важной (поэтому, если вы используете событие DOM Ready для загрузки всего, это неправильное место)

Внизу: при загрузке содержимого важнее

Как сказал @Quentin 6 лет назад: Когда вы выбираете загрузить свой javascript внизу Страница вместо верхней?

Я бы добавил что-то еще, но я думаю, что один достаточно ясен, и если нет другого ответа по этому вопросу:

Должен ли код JQuery идти в верхнем или нижнем колонтитуле?

1
ответ дан Community 24 August 2018 в 23:47
поделиться

Javascript запускает одну вещь за раз. Обычно он запускает код сверху. Поэтому перед запуском кода вы не можете запрашивать переменные или функции, объявляющие их. ex:

<script> var one = 1 </script>
<script> console.log(one) </script>

выйдет из системы 1, однако:

<script> console.log(one) </script>
<script> var one = 1 </script>

выйдет из строя неопределенно.

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

1
ответ дан joemillervi 24 August 2018 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: