2014-10-11 3 views
2

Я новичок в javaScript, начал изучать его несколько дней назад. Поэтому я узнал о функциях и в большинстве учебных пособий, которые я читал, сказал, что функции должны быть помещены в тег скрипта, который находится в главном теге, чтобы они могли быть загружены первыми. Что это значит ? Поскольку я написал этот кодЗагрузка функций в javascript

<!DOCTYPE html> 
<html> 
<body> 
<p id="demo"></p> 

<script> 
function1(); 
function function1() { 
document.getElementById("demo").innerHTML="HEY"; 
} 
</script> 
</body> 
</html> 

и код работает. Дело в том, что я не понимаю, как это сделать. Как вы можете назвать функцию, которая еще не была загружена? Просматривает ли браузер тег сценария по-другому, чем остальная часть HTML-документа? Может ли кто-нибудь объяснить, как это работает?

+1

http://stackoverflow.com/q/1013385/3492895, http://stackoverflow.com/a/336868/3492895, подумайте, что это должно ответить на ваш вопрос. – Winestone

+0

Также не нужно указывать сценарий в голове tag: http://stackoverflow.com/q/436411/3492895 – Winestone

+0

Большое спасибо за ссылки, ребята, извините, я задал вопрос, который был задан раньше. – Dvorog

ответ

1

Путь вы кодирования правильно сценарий должен быть в нижней

Согласно Best Practices для ускорения вашего веб-сайта

Помещенные скрипты на нижней метке Yahoo,: Javascript Проблема, вызванная сценариями , заключается в том, что они блокируют параллельные загрузки. Спецификация HTTP/1.1 предполагает, что браузеры загружают не более двух компонентов параллельно на каждое имя хоста. Если вы обслуживаете свои изображения с несколькими именами хостов, вы можете получить более двух загрузок, которые будут происходить в . Однако при загрузке сценария браузер не будет запускать любые другие загрузки даже на разных именах хостов. В некоторых ситуациях не так просто переместить скрипты в нижнюю часть. Если для примера сценарий использует document.write для вставки части содержимого страницы , ее нельзя перенести на страницу ниже. Также могут быть проблемы с . Во многих случаях существуют способы обхода этих ситуаций . Альтернативное предложение, которое часто возникает, заключается в использовании отложенных сценариев . Атрибут DEFER указывает, что скрипт не содержит document.write и является ключом к браузерам, что они могут продолжить рендеринг. К сожалению, Firefox не поддерживает атрибут DEFER . В Internet Explorer сценарий может быть отложен, но не сколько угодно. Если сценарий можно отложить, его также можно переместить в начало страницы. Это ускорит загрузку ваших веб-страниц. наверху | обсудить Это правило

источник: Best Practices for Speeding Up Your Web Site

Согласно Google Apps Script Best Practices

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

Источник: (не только head) Load JavaScript last

переменной и функции Hoisting in JavaScript

<script> 

function function1() { 
    document.getElementById("demo").innerHTML="HEY"; 
} 

function1(); 
</script> 
+0

«Атрибут defer поддерживается во всех основных браузерах». - http://www.w3schools.com/tags/att_script_defer.asp :) – Winestone

+0

W3school очень плохая, никогда не используйте его http://www.w3fools.com/, пожалуйста, используйте https://developer.mozilla.org/en- US/ –

+0

https://developer.mozilla.org/en/docs/Web/HTML/Element/script#Browser_compatibility, кажется довольно совместимым со мной – Winestone

1

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

Теперь, JavaScript, как правило, помещается в отдельный файл, и рекомендуется поместить их в head и использовать либо добавить async или defer тег к ним (вы не можете async или defer рядный Javascript).

Объявление функции, как:

myFuncName(); //Valid 
function myFuncName() {} 

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

myFuncName(); //Invalid 
var myFuncName = function() {}; 

Источники и дальнейшего чтения:

1

Тег сценария - это целый блок. Funtion1() вызывается после загрузки всего скрипта.

Смежные вопросы