SuperSonicFire
Новичок
Дата регистрации:
22.06.2016 09:29:52
Сообщений: 2
function initHeader(){
// объекты виджета, с которыми будем работать в функциях
var var1 = $('#div1';
var var2 = $('#div2';
// ...
// вспомогательные функции
function function1(){
// ...
}
function function2(){
// ...
}
function function3(){
// ...
}
}
Особенность этого шаблона в том, что все вспомогательные функции находятся внутри основной. Также: функцию initHeader() мы вызываем только один раз (например после HTML-кода шапки), а вспомогательные фукнции - сколько угодно раз. Пример вспомогательной фукнции - обработка поля "поиск" и кнопки рядом с ним, которые часто располагается именно в шапке.
Зачем такая структура? Первое и самое главное: операция по выборке DOM-объектов является очень ресурсозатратной; соглано курсу https://myrusakov.ru/reactjs_course.html, библиотека jQuery делает это в порядка 10 раз медленнее нативного JavaScript. Поэтому, такие операции необходимо минимизировать. Если мы напишем все вспомогательные функции вне initHeader(), то тогда придётся либо передавать захваченные, например, фукнцией jQeury() DOM-объекты во вспомогательные функции в виде аргументов, либо захватывать их заново, чего мы и стремимся избежать. В приведённом мной шаблоне все переменные, объявленные в initHeader, будут доступны во всех внутренних функциях.
Почему же не устраивает вариант с передачей аргументов? Согласно книге Роберта Мартина "Чистый код", в идеале у функции не должно быть аргументов вообще, а если аргументы неизбежны, то должен быть один, максимум два аргумента. Но в нашем случае, внутри вспомогательных функций может быть нужно большое количество переменных: это и jQuery-объекты, какие-то константы, рабочие переменные наподобие времени анимации, какие-то введённые данные и так далее. Если написать все вспомогательные функции вне основной, то тогда придётся всё это передавать в виде аргументов, и в два аргумента уложиться едва ли получится. Такая структура, которую я показал, избавляет нас от необходимости передавать аргументы.
Приведите, пожалуйста, аргументы за и/или против такого подхода.