function preloadImages() {
// создаем функцию с помощью Function declaration (инструкции объявления функции)
// как бы говорим интерпретатору "создай функцию и помести ее в переменную preloadImages"
if (typeof arguments[arguments.length - 1] == 'function') {
// в javascript нет "перегрузки" функций, функция может принимать сколько угодно значений
// доступ к переданным аргументам можно осуществить через "псевдо-массив" arguments
// arguments.length - возвращает количество переданных аргументов
// в arguments можно обращаться к аргументу по номеру
// arguments[arguments.length - 1] - последний параметр функции
// typeof x - возвращает строку, содержащую информацию о типе операнда x
// в конечном счете проверяется, является ли последний переданный аргумент функцией
var callback = arguments[arguments.length - 1];
// копируем ссылку на эту функцию в переменную callback
// эта переменная еще в момент вхождения интерпретатора в функцию preloadImages поднимется и будет
// в лексическом окружении (LexicalEnvironment) функции
} else {
var callback = false;
// иначе остаемся без коллбэка
}
if (typeof arguments[0] == 'object') {
// если первый аргумент функции является объектом (всё, кроме чисел, строк, true, false, null, undefined)
// здесь, видимо, мы ждем в первом параметре массив изображений
// вызов вида preloadImages(['img1.jpg',..., 'imgN.jpg'])
var images = arguments[0];
// копируем ссылку из первого аргумента-объекта в переменную images
var n = images.length;
// записываем количество элементов в массиве в переменную
} else {
// если первый аргумент не объект,
// скорее всего, на входе ждем список строк-урл картинок
// preloadImages('img1.jpg',..., 'imgN.jpg')
var images = arguments;
// здесь уже копируем ссылку на весь список аргументов
var n = images.length - 1;
// записываем в переменную n количество параметров с вычетом одного,
// видимо, задумывалось, что последним аргументом будет функция-callback
// иначе последнее изображение не обработается
}
var not_loaded = n;
// временная переменная, количество незагруженных изображений
for (var i = 0; i < n; i++) {
// обычный цикл с инкрементом на каждой итерации
jQuery(new Image()).attr('src', images[i]).load(function() {
// new Image() - создаем HTMLImageElement,
// jQuery(new Image()) - делаем из него jquery объект для возможности работы с ним с помощью методов jquery
// .attr('src', images[i]) - проставляем объекту атрибут src, что сразу запустит загрузку изображения
// load(function() { - и привяжемся к событию load изображения
if (--not_loaded < 1 && typeof callback == 'function') {
// сначала уменьшаем, потом сравниваем с 1 нашу временную переменную
// отлавливаем когда у нас все изображения загрузятся,
// порядок загрузки не важен тут
// и если в переменную callback попала функция, то
callback();
// вызываем ее
}
});
}
}