Вопрос: Почему завершение моей библиотеки JavaScript в анонимной функции исправило мое состояние гонки?
Примечание. Меня также интересуют комментарии о хороших решениях для синхронной и асинхронной загрузки внешних ресурсов JavaScript.
Я работаю над проектом, который предполагает написание расширения для браузера с использованием кроссрайдера. Если вы не знакомы с расширениями кросс-райдера, они реализованы в JavaScript, у вас есть фоновая страница, которая может взаимодействовать со страницей приложения. Страница приложения может работать с каждой открытой вкладкой и может управлять DOM. Я планирую загрузить большую часть кода расширения удаленно, когда пользователь запрашивает его открытие. Недавно я столкнулся с состоянием гонки, когда добавил страницу скрипта на страницу , ссылающуюся на Рафаэля , а затем что-то, что я построил из граффли
Из того, что я понимаю, если страница загружается с уже установленными тегами сценария, то выполнение будет выполняться синхронно, хотя, поскольку я добавлял теги сценария, выполнение выполнялось асинхронно. Это противоположная проблема, которая возникает у большинства людей. Возникнув с этим, я узнал, что обертывание моего кода кода в анонимную функцию исправило мое состояние гонки. Зачем? Я читал этот пост о , оборачивая целые файлы Javascript в анонимные функции , и это, похоже, не имеет никакого отношения к условиям гонки.
Мой телефонный код:
var scriptsToLoad = [ "http://example/Scripts/lib/raphael.js",
"http://example/Scripts/lib/graffle.js",
"http://example/Scripts/lib/log4javascript.js"];
for(var i in scriptsToLoad) {
(function(){
$("head")
.append($("<script></script>")
.attr("type", "text/javascript")
.attr("src", scriptsToLoad[i]));
})()
}