На этом шаге мы рассмотрим некоторые особенности вызова библиотечных функций jQuery.
Подход, рассмотренный на предыдущем шаге, имеет свои недостатки. Чтобы добиться требуемого эффекта, мы производим непосредственное изменение кода разметки HTML. Столь тесная связь между структурой и функциональностью приводит к загромождению кода, особенно при необходимости использовать одну и ту же функцию в нескольких страницах или в случае обработки других событий, таких щелчок мышью, в каждом экземпляре некоторого элемента страницы. Добавление новых эффектов может потребовать внесения изменений во многих местах, что увеличивает вероятность ошибки и осложняет параллельную работу дизайнеров и программистов.
Чтобы избежать подобных трудностей, библиотека jQuery предоставляет возможность запланировать однократный вызов функции после загрузки всего дерева DOM документа без ожидания загрузки изображений с помощью конструкции $(document).ready(). Для функции, определенной на предыдущем шаге:
function highlightPoemStanzas() { $('.poem-stanza').addClass('highlight'); }
$(document).ready(highlightPoemStanzas);
Данный прием не требует внесения изменений в разметку HTML; подключение функции производится непосредственно в файле JavaScript.
Однако описанная реализация все еще остается немного избыточной, так как функция highlightPoemStanzas() определяется лишь для однократного использования. Последнее означает, что для получения незначительной выгоды нам приходится использовать идентификатор в глобальном пространстве имен функций, который мы должны помнить, чтобы не использовать его повторно. В JavaScript, как и в некоторых других языках программирования, имеется возможность обойти такое неэффективное использование пространства имен, которая заключается в применении анонимных функций (иногда их называют лямбда-функциями). Благодаря анонимным функциям мы можем записать программный код в том виде, в каком он был представлен первоначально:
$(document). ready(function() { $('.poem-stanza').addClass("highlight'); });
С помощью ключевого слова function, за которым не следует имя функции, мы определяем функцию именно там, где она необходима, но не раньше. Тем самым мы ликвидируем лишний программный код JavaScript и сокращаем его общий объем до трех строк. Этот способ чрезвычайно удобен при работе с библиотекой jQuery, поскольку многие методы в качестве аргументов принимают функции, редко используемые более одного раза.
Если анонимные функции таким способом определяются в теле других функций, можно создать замыкание. Это продвинутая и мощная концепция, однако следует понимать, что широкое использование вложенных определений функций может приводить к непредсказуемым последствиям и чрезмерному расходованию памяти.
Со следующего шага мы начнем рассматривать селекторы.