ну и плюс ко всему такой код читать тяжело:
...
function event(el,event,fn) {
if (el.readyState=="complete") return fn();
var count= (event=="readystatechange") ? 2:1;
if ( el.addEventListener) el.addEventListener (event, fn ,false)
else el.attachEvent("on"+event, function(){ count--; if (count==0) fn() } );
}
...
А если его привести в читаемый вид, то не многим меньше он станет:
$Load = (function() {
var loadedScripts = {},//только загруженные скрипты
allscript={};//все скрипты
//хелпер для установки обработчиков событий
function event(el, event, fn) {
if (el.readyState == "complete") {
return fn();
}
var count = (event == "readystatechange") ? 2 : 1;
if (el.addEventListener) {
el.addEventListener(event, fn ,false);
} else {
el.attachEvent("on" + event, function(){
count--;
if (count == 0) {
fn();
}
});
}
}
//грузит скрипт и вешает событие load
function loadAsync(src, callback) {
setTimeout(function() {
if (!(src in allscript)) {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
document.documentElement.firstChild.appendChild(script);
allscript[src] = script;
}
event(allscript[src], '\v' != 'v' ? 'load' : "readystatechange", function() {
callback(src, script);
});
}, 1);
}
//возвращаем функцию
return function (scripts, onload) {
var scripts = typeof scripts === "string" ? [scripts] : scripts,
count = scripts.length;
for(var i = 0; i < scripts.length; i++) {
if (scripts[i] in loadedScripts) {
count--;
} else {
loadAsync(scripts[i], function(src, script){
loadedScripts[src] = script;
count--;
if (count == 0) {
onload();
}
});
}
}
if (count == 0) {
onload();
}
}
})();
Плюс таймеры это излишек,
плюс проверка: (event == "readystatechange") ? 2 : 1;
совсем не правильно, ибо гарантии нет что отработает именно два раза
плюс условие '\v' != 'v'
это вообще из разряда идиотизма, ибо код написанный с использованием багов браузера, может привести к неожиданным последствиям. Такое нужно использовать только в крайней необходимости. Ибо при эмуляции того же ИЕ8 в ИЕ9 не факт что проявится это баг, хотя я и не проверял.