Когда JavaScript оценивает функцию? Нагрузка на страницу или когда вызывается функция?JavaScript: Когда JavaScript оценивает функцию, onload или когда функция вызывается?
Причина, почему я спрашиваю, потому что у меня есть следующий код:
function scriptLoaded() {
// one of our scripts finished loading, detect which scripts are available:
var jQuery = window.jQuery;
var maps = window.google && google.maps;
if (maps && !requiresGmaps.called) {
requiresGmaps.called = true;
requiresGmaps();
}
if (jQuery && !requiresJQuery.called) {
requiresJQuery.called = true;
requiresJQuery();
}
if (maps && jQuery && !requiresBothJQueryGmaps.called) {
requiresBothJQueryGmaps.called = true;
requiresBothJQueryGmaps();
}
}
// asynch download of script
function addScript(url) {
var script = document.createElement('script');
script.src = url;
// older IE...
script.onreadystatechange=function() {
if (this.readyState == 'complete') scriptLoaded.call(this);
}
script.onload=scriptLoaded;
document.getElementsByTagName('head')[0].appendChild(script);
}
addScript('http://google.com/gmaps.js');
addScript('http://jquery.com/jquery.js');
// define some function dependecies
function requiresJQuery() { // create JQuery objects }
function requiresGmaps() { // create Google Maps object, etc }
function requiresBothJQueryGmaps() { ... }
То, что я хочу сделать, это выполнить Асинхронный загрузку моего JavaScript и начать в кратчайшие сроки начать выполнение этих сценариев но мой код имеет зависимости от того, когда скрипт был загружен и загружен.
Когда я пытаюсь выполнить код выше, кажется, что мой браузер все еще пытается оценить код в моих require*
функциях еще до того, как эти функции были вызваны. Это верно? Или я не понимаю, что случилось с моим кодом?
Этот вопрос имеет значение только для того, чтобы вы были достаточно мудры, чтобы поместить свой JavaScript во внешний файл из вашей разметки. Если вам не хватает такой мудрости, тогда вам следует ожидать неопределенности и хаоса. – 2010-05-11 16:30:54