Кажется, что большинство интересных и важных советов уже были упомянуты, так что это лишь небольшое дополнение.
Небольшой совет - это функция jQuery.each (object, callback) . Все, вероятно, используют jQuery.each (обратный вызов) для перебора самого объекта jQuery, потому что это естественно. Утилита jQuery.each (object, callback) выполняет итерации по объектам и массивам. Долгое время я почему-то не понимал, что это может быть, за исключением другого синтаксиса (я не против написания всех модных циклов), и мне немного стыдно, что я понял его основную силу только недавно.
Дело в том, что поскольку тело цикла в jQuery.each (object, callback) является функцией , вы каждый раз получаете новую область видимости в цикле, что особенно удобно при создании замыканий в цикле.
Другими словами, типичная распространенная ошибка - сделать что-то вроде:
var functions = [];
var someArray = [1, 2, 3];
for (var i = 0; i < someArray.length; i++) {
functions.push(function() { alert(someArray[i]) });
}
Теперь, когда вы вызываете функции в functions
массиве, вы будете трижды предупреждены о содержимом, undefined
которое, скорее всего, не то, что вы хотели. Проблема в том, что существует только одна переменная i
, и все три замыкания относятся к ней. Когда цикл заканчивается, окончательное значение i
равно 3 и someArrary[3]
равно undefined
. Вы можете обойти это, вызвав другую функцию, которая создаст для вас замыкание. Или вы используете утилиту jQuery, которая в основном сделает это за вас:
var functions = [];
var someArray = [1, 2, 3];
$.each(someArray, function(item) {
functions.push(function() { alert(item) });
});
Теперь, когда вы вызываете функции, вы получаете три оповещения с содержанием 1, 2 и 3, как и ожидалось.
В общем, это ничего, что вы не могли бы сделать сами, но приятно иметь.