Какой-нибудь footer может встречаться и в article, и в section и в прочих группах элементов. Так что какая разница — писать комбинатор с классом где-то в начале цепочки или присвоить класс непосредственно каждому элементу footer? Экономия HTML-кода? Сэкономленные 10 килобайт, ужимаемые до 2-х GZIP-ом при передаче не слишком согреют при случайном пересечении стилей.
А при подключении шаблонов никто не думает — просто берут готовый кусок кода и всё. Единственный вопрос, который терзает — что же, что же поставить для такой конструкции. ИМХО тут не нужно слишком сильно заморачиваться — не знаешь, как делать, лепи div и span. С опытом у любого появляется набор решений задач по структурированию.
uaf0x: А можно мне по большому секрету объяснить, зачем собирать из кусков данных, полученных с сервера, объект, который потом отослать обратно на сервер? Вам за лишний трафик приплачивают?)
Денис Малиночкин: Как мне известно, в теле инструкции действительно нельзя писать FD, поскольку инструкции не создают контекст, но присваивать функцию как значение (FE) в теле цикла никто не запрещает. С addEventListener, конечно, это не связано.
Вячеслав Лебедев: Потому, что:
1. Вы сначала ищете все элементы, что всегда снижает производительность, а я использую фазу всплытия события.
2. Если вы добавите потом такие же элементы, для них обработчик не сработает, а в моём случае обработчик запустится для любого динамически добавленного элемента.
3. Вы должны дождаться построения DOM, а я могу объявить регистрацию сразу — ведь document существует всегда.
Всегда лучше использовать отлов в корневых элементах, что позволяет в нативном JS использовать и фазу распространения. Впрочем, это уже для ниндзя:)
Вячеслав Лебедев: А вы думаете, зачем нужна абстракция и тонны API для этой абстракции? Для вашей же пользы и экономии времени. Для оперирования нативным JS требуется серьёзное и глубокое понимание того, что вы делаете.
Вячеслав Лебедев: Если вы зарегистрировали обработчик на .jsCart без применения bind() — в обработчике this будет указывать именно на .jsCart.
Если же вам потребовалось передать в this ссылку на некий объект, то нужно организовать цикл по parentNode, пока не дойдём до нужного узла.
Единственная проблема, что может прийти мне в голову — устанавливать в качестве обработчика анонимную функцию и пытаться использовать переменные цикла в этом обработчике. Тогда да — каждый из замыкания получит одно и то же значение для таких переменных. А других ограничений не вижу.
Вячеслав Лебедев: Если вам не требуется передавать передавать ссылку на абстрактный объект в this, как это сделал я в примере, вам bind() вообще не нужен. То есть совсем.
Метод bind() нужен для гарантированной ссылки в this, а не для передачи аргументов. Почитайте про этот метод.
Сергей: Я вас огорчу — jQuery создаёт именованные функции взамен ваших анонимных. Иначе он не смог бы снять слушатель.
Вы просто привыкли к библиотеке, которая делает всё за вас, и думаете, будто так и в нативном JS происходит.
Я всего лишь попросил объяснить, чем отличается в вашем примере работа с анонимными функциями и именованными. А вы стали писать такое, что... Ну вот опять:
$(function(){})
$(document).ready(function(){})
Это — вообще одно и то же. Если у вас ошибка, проверьте, так ли записали.
К анонимным функциям имеет опосредованное отношение. Выше показано, как можно передать ссылку на именованную функцию без каких-либо последствий.
!function(){}()
(function(){})()
Это — способ применения FE там, где ожидается FD. И вот это и есть один из примеров применения анонимных функций.
Я написал вам тот пример и думал, что вы напишете — вот, вот применение анонимных функций. Увы.
А замыкание — это вообще организация работы функций. Любых. Именованных, анонимных. FE, FD, new Function(). Потому что по ECMAScript при создании функции всегда возвращается closure.
А при подключении шаблонов никто не думает — просто берут готовый кусок кода и всё. Единственный вопрос, который терзает — что же, что же поставить для такой конструкции. ИМХО тут не нужно слишком сильно заморачиваться — не знаешь, как делать, лепи div и span. С опытом у любого появляется набор решений задач по структурированию.