Что такое скоуп проекта

Удобны ли диаграммы Гантта в разработке ПО?

Как известно, разработка программного обеспечения является длительным процессом, в котором в основном участвуют люди в разных частях этого процесса.

Люди уже давно научились планировать и описывать процессы при помощи практик календарно-сетевого планирования, ярким представителем которых является диаграмма Гантта. Разработано и обкатано множество программных инструментов, легко доступных любому желающему.

По причине широкого распространения и относительно удобной визуализации описываемого процесса, эти диаграммы часто используются на стадии планирования при разработке программного обеспечения. Но так ли удобны и необходимы эти диаграммы в разработке ПО?

Основная цель в построении диаграммы понять: сколько ресурсов потребуется, какие задачи необходимо выполнить, спрогнозировать срок, к которому будут выполнены эти задачи, и понять стоимость работ. Цель достигается путем определения перечня задач, требуемых ресурсов, определением зависимостями между задачами, выравниванием использования ресурсов для эффективного их использования, с учетом рисков.

Воспользуемся классической аналогией разработки ПО — строительство дома. В данном контексте она наиболее уместна. Чтобы построить дом, затратить при этом минимум средств и уложиться в требуемые сроки необходимо понять: сколько ресурсов нам потребуется (кирпич, цемент, бетон, рабочие и т.д.), когда они потребуются, в какой последовательности выполнять работы, а также выдержать технологические нормы на выполнение хорошо известного и довольно прозрачного процесса строительства дома. Использование диаграммы Гантта в данном случае органично вписывается в решение данной задачи.

Я всегда завожусь, когда люди несведущие в разработке часто используют аналогию со строительством дома, для них не видно и части проблем, однако, они есть и существенные. Чем же так сильно отличается процесс разработки ПО от процесса строительства дома?

В разработке основным и практически единственным ресурсом является человек, отчего он часто обижается на цинизм, заложенный в сути календарного планирования: человек не ресурс, он хочет, чтобы его любили и уважали. На составление плана и поддержание его в актуальном состоянии приходится тратить массу времени, которое можно было бы пустить на достижение конечной цели. Конкретный разработчик, тестировщик или аналитик не является в чистом виде ресурсом, потому что конкретного исполнителя трудно и дорого заменить, ведь только он хорошо знает некоторую часть системы, обладает специфическим опытом и навыками. Человек крайне нелинейный элемент всей этой цепочки, а значит, вы не можете 100% рассчитывать на его заинтересованность, лояльность и доступность.

Перечень задач, которые необходимо выполнить разработчику, далеко не так очевиден даже при хорошем понимании сути будущего продукта. Можно использовать автоматические тесты, а можно не использовать, можно пропустить некоторые этапы на фазе анализа, тестирования или документирования, а на некоторых участках наоборот потребуется уделить чему-то больше внимания. Сверхвысокая сложность всех тонкостей процесса позволяет охватить перечень задач лишь поверхностно, многие из них вылезут на более поздних стадиях проекта. Наконец длительность процесса противоречит скорости, с которой изменяются требования заказчика или пользователей к продукту.

Процесс разработки куда более гибкая вещь, что позволяет заказчику свободнее манипулировать скоупом проекта, привлекаемыми ресурсами, стоимостью работ. То, что бетонная стяжка должна сохнуть 3 дня и никак не меньше заказчику понятно, но то, что подсистема разграничения прав доступа пишется месяц, находит понимание куда сложнее. Любое изменение в нашем треугольнике влечет за собой существенную переработку плана, что отнимает массу времени и требует наличия выделенного человека, например, менеджера проекта.

Понять и осознать весь тот клубок из задач, которые предстоит выполнить при реализации относительно сложной системы практически не возможно, а, следовательно, и определить зависимости между задачами. Составить эффективный план и минимизировать стоимость практически не представляется возможным, поскольку любое изменение в процессе влечет за собой повторное перепланирование использования ресурсов.

Подавляющее большинство проектов используют итерационную модель процесса, однако линейный календарный график совершенно не учитывает данную специфику. Жизненный цикл продукта состоит из нескольких этапов (релизов), в каждом из которых есть повторяющиеся части. Жизненный цикл реализуемой функции состоит из хорошо известных фаз анализа, проектирования, разработки, тестирования и т.п. У любой функции такой жизненный цикл. На диаграмме Гантта вам приходится для каждой функции расписывать задачи для конкретной фазы, а это крайне утомительное занятие, но если этого не делать, то ваш план никуда не годится.

Диаграмму Гантта хорошо применять для описания детерминированных и почти статических процессов, в которых используется подавляющее большинство линейных ресурсов, технологические циклы которых хорошо известны и отработаны.

Я для себя решил, что нет никакого смысла тратить время на составление и поддержание этих диаграмм, это время и силы лучше потратить на коммуникацию между участниками, реальную помощь проекту и повышение лояльности участников.

Однако, это не означает, что скоуп, сроки, стоимость и ресурсы не нужно учитывать и планировать, нужно, но только используя другие практики.

Источник

SCOPE проекта

Рассмотрим такую ситуацию, приходишь ты весь такой замотивированный на результат к своему руководству и говоришь: «У меня есть идея продукта!» и начинаешь красиво излагать свои мысли. Тебя выслушали, не всё поняли, ну а другого исхода ожидать и не стоило, ведь ты даже не поинтересовался о наличии времени.

Руководитель смотрит на тебя и говорит: «Сделай scope проекта!»

Когда я в первый раз услышал «Сделай scope проекта» меня одновременно охватила чувство восторга, ведь мою идею не проигнорировали, но в то же время появилось чувство тревоги, так как никогда раньше я не сталкивался с подобным.

Поиски информации про scope и его примеров в интернете дали не конкретное, но примерное представление что это и как это разработать.

Дело в том, что примеров адекватных мало, а также, каждый найденный мною пример, представлял что-то совершенно отличное от предыдущего, от чего в голове все больше образовывалось каша.

Чуть позже я вспомнил про книгу «Разработка требований к программному обеспечению», которая помогла мне сориентироваться в разработке SCOPE проекта, рекомендую её к прочтению!

Инструкция по созданию scope (концепции) проекта

Давайте разберем создание концепции на примере онлайн-сервиса предзаказа кофе.

Крупная федеральная сеть кофеен «Моя кофейня» обратилась в студию разработки востребованных продуктов «Product Architect Guide» с просьбой оценить потенциал и готовность рынка к онлайн-сервису предзаказа кофе на территории Российской Федерации и разработать такой продукт, если результаты исследований окажутся положительными и удовлетворят руководство сети кофеен «Моя кофейня».

Оценка рынка кофе в РФ

Исследуем рынок кофе на Родине. Ищем информацию и данные на предмет:

— объёмов и структуры потребления кофе.

Анализируем найденный контент и перекладываем свои мысли в концепцию, не забываем указать риски и сделать выводы.

Развернуто отвечаем на вопросы:

— Какую проблему решаем?

— Зачем нужен онлайн-сервис предзаказа кофе?

— Для кого мы его делаем?

— Что онлайн-сервис даст тем, для кого мы его сделаем?

— Что из себя онлайн-сервис будет представлять?

— В чем его преимущества?

— Где уникальность онлайн-сервиса?

Ответив на все указанные вопросы, мы рассказали основную идею проекта.

Не забываем, что заказчик тоже человек (или группа лиц) и может забыть донести важные глобальные цели проекта.

Занимаем проактивную позицию и превосходим ожидания заказчика: указываем глобальные цели проекта.

Если заказчик посчитает указанные цели слишком амбициозными, то мы всегда сможем внести правки в документ.

Выбираем кофейни сети, в которые мы пойдем проводить опрос гостей и персонала.

Фиксируем результаты и делаем выводы.

Рассказываем про возможности работающего бизнеса, которые нам необходимо учитывать при разработке сервиса.

Фиксируем бизнес-цели по формуле:

Рассказываем про бизнес-риски от внедрения сервиса, т.е. какие негативные последствия для бизнеса могут появится после внедрения сервиса в «боевую» эксплуатацию.

Анализируем и рассказываем о преимуществах использования сервиса для рядового гостя и заведения.

Рассказываем про функциональные возможности сервиса.

Указываем роли и зоны ответственности в команде разработки сервиса, а также профили заинтересованных лиц.

Если требуется дополнительная декомпозиция концепции проекта, то достаточно будет расписать:

— критерии успешности проекта;

— архитектуру информационной системы и её отдельных элементов;

— описание элементов системы и их взаимодействия;

— стратегию управления проектом;

— совокупную стоимость владения сервисом;

— схему внедрения сервиса.

Полное описание концепции можно скачать в новом Telegram-канале

Так все хорошо начиналось, чтобы кончиться телеграмм каналом

И, правда, дичь какая-то.
напоминает «отправь sms с содержанием 911 на короткий номер 911, чтобы скачать рингтон Верки Сердючки»

Если захотелось бы автору, чтоб скачали, то дал бы ссылку нормальную

А там было хорошее начало? 🙂 Мы что-то пропустили? Неструктурированная и местами нелогичная банальщина от копирайтера для продвижения ТГ-канала

Говорить о неструктурированности и нелогичности без конструктивной критики, это я смотрю у тебя норма:)

Вам примеры нужны? Легко. На шаге «Оценка рынка» ничего не сказано про анализ конкурентов. Ничего не сказано про прайсинг и про промо продукта/сервиса, забыли про финмодель вообще. И такого можно много надергать. Это грубейшие фундаментальные ошибки, так что текст явно писал кто-то, кто подобными вещами не занимался. Видны уши копирайтера, который за часик прочитал по диагонали данные ему источники и написал, как понял.

Без обид, но меня удивляет Ваше нежелание глубже проанализировать статью. Как я и говорил в комментарии ниже, которому вы поставили «-», что негатив в комментариях идёт от людей, которые хотят сразу все готовенькое на блюдечке. С шагом 2 ознакомьтесь. Автор статьи все правильно рассказал, в том числе обобщил главное, если Вас не устраивает, что Вам весь материал от и до не разжевали, так зачем критиковать? Может быть какие-то детали специально не доведены до аудитории. Обратитесь к автору с просьбой уточнить подробнее интересующие Вас моменты. Нет идеальных людей, продуктов и вообще ничего идеального нет, подумайте о том, что Вы что-то не так поняли или не знаете. Лично у меня принцип такой: я благодарю человека за потраченное время и силы, а если мне что-то не ясно капаюсь самостоятельно, и если не могу найти ответ, то обращаюсь с вежливой просьбой объяснить.

С шагом 2 ознакомьтесь
1. И что я увижу на шаге 2? Он там ценообразование продукта сделал? Финмодель построил?
2. Вопрос не в «хотят готовенькое», а в том, что автор позиционирует себя экспертом в данном вопросе. А на самом деле выясняется, что фундаментальные вещи он упустил. Написал учебник по арифметике, сложение и вычитание упомянул, а про умножение и деление забыл. А теперь Вы говорите, что это не учебник дерьмовый, а автор специально так задумал, чтобы дети сразу всех знаний не получили. Ога, прям сразу верится.

Крупная федеральная сеть кофеен «Моя кофейня» обратилась в студию разработки востребованных продуктов «Product Architect Guide» с просьбой оценить потенциал и готовность рынка к онлайн-сервису предзаказа кофе

Если бы Apple проводила подобную оценку, то первый iPhone был бы кнопочным)

Как человек, который разрабатывал концепции, я понимаю что это такое и сколько сил и времени нужно вложить в разработку документа. Те, кто здесь кричит о банальщине, неструктурированности и о том, что не правильно связывать продвижение собственного ресурса со статьей, в моем представлении люди, которые лишний раз доказывают, что не терпят, когда им не приносят все на блюдечке. Наверное такие мыслят так: «Ага, что-то новенькое, где это взять? Ах, тут надо лишний раз куда-то перейти, да ещё и в тг-канал. автор нахал и самодур, как он себе такое позволяет? Не мог что ли ссылку нормальную дать на скачивание. Да и мне как-то индифферентно на автора и его время, я вообще просто поболтать тут в комментах люблю.»

Источник

Scope Management

PMBoK определяет Project Scope как Работа, которая должна быть завершена для реализации продукта или услуги.

А теперь то же самое простыми словами.

Фишка в том, что зачастую в небольших проекта скоуп менеджмент не выделяется в отдельный процесс, а обозначается в плане проекта как «сбор требований».

Но на самом деле, для запуска больших проектов скоуп менеджмент может выделяться в самостоятельный проекта, где команда будет заниматься именно определением целей, задач и требований.

Окей, определили набор задач. А при чем тут менеджмент? Чем тут управлять?

Скоуп менеджмент включает в себя три процесса:

— Планирование (это попытка собрать в кучу все задачи и определить объем работы)

— Контроль (отслеживание изменений задач: задача может быть выполнена/не выполнена, а может быть изменена или отменена)

— Завершение (сравнение результатов с первоначальным планом)

Для менеджера проекта скоуп менеджмент обычно состоит из следующих шагов:

Понять цели проекта

Чтобы определить масштаб проекта, важно сначала установить цели проекта. Это может быть новый продукт, создание нового сервиса в организации или разработка нового программного обеспечения. Целей может быть несколько. Менеджер проекта гарантирует, что команда обеспечивает результаты в соответствии с планом.

Определить потребности проекта

Нам известны цели. Теперь мы можем определить масштаб проекта. Для этого задаем тот самый вопрос — Чего хочет клиент? Какую работу необходимо выполнить?

Масштаб проекта понятен, мы знаем, чего нам нужно достичь. Теперь формулируем стратегию — как мы будем достигать цель?

В зависимости от проекта, под выделением ресурсов может пониматься и формирование команды, и закупка техники, и даже аренда самолета.

Нужно определить, за счет каких ресурсов мы будем выполнять задачи.

Определить бюджет проекта

Ресурсы стоят денег. В какую копеечку заказчику обойдется проект?

А еще бывает так, что бюджет определен заранее и нам нужно спланировать проект таким образом, чтобы он вписался в этот бюджет.

И когда на руках есть все данные мы можем понять, сколько времени будет длится проект и в какое время будет проходить каждый из его этапов.

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Сметное дело в иноземных терминах? Оригинально.

Эффективные менеджеры придумали техзадание и проектирование?

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Такие дела

Этим утром я помог своей соседке кое с чем, и она сказала мне: «Я бы вышла за тебя замуж». Я не мог в это поверить. Ты делаешь что-то хорошее для кого-то, а этот человек в ответ угрожает разрушить твою жизнь.

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Важно слышать своих детей

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Росгвардейцы несколько часов избивали спасателя МЧС и угрожали его изнасиловать

Сотрудники Росгвардии несколько часов избивали жителя Улан-Удэ спасателя Алексея Попова.

Его называли «чуркой» и угрожали изнасиловать служебной дубинкой

. После этого Попова оштрафовали за неповиновение полиции.

Только недавно сотруднику МЧС удалось опротестовать в Верховном суде это решение и добиться признания собственной невиновности. Подробности этой истории описало издание «Сибирь. Реалии»*.

Сотрудник МЧС Алексей Попов рассказал, что его задержали во дворе его дома в Улан-Удэ еще 3 августа. Он шел на день рождения брата.

По словам Попова, на него налетели неизвестные мужчины, потом оказалось, что это были сотрудники Росгвардии.

Они стали вымогать у него 5 тыс. рублей, которые тот нес в подарок. Попов успел прокричать об этом выбежавшим на шум соседям.

После этого его в течение суток возили по разным отделам полиции.

В машине его избили так, что спина была вся синяя от гематом, однако врачи отказались зафиксировать эти травмы, опасаясь сотрудников Росгвардии.

«Он берет и надевает мне пакет на голову. Я пытаюсь зубами захватить, чтобы помешать надеть.

После нескольких часов пыток и издевательств Попова отвезли в суд, где, не обращая внимания на его заявления об избиениях, оштрафовали на 3 тыс. рублей за неповиновение полиции.

Через несколько месяцев Верховный суд оправдал его.

Впрочем, напавших полицейских до сих пор к ответственности не привлекли. Один из них, по словам Попова, не так давно приходил в его подъезд с автоматом, «чтобы поговорить».

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Свадьба

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Ответ Wexler1980 в «Почему мы так хреново живем»

Так, мужик, подержи моё пиво.

Лет 10 назад работал продавцом всякой электронной хрени в киоске на рынке.

И как-то зимним утром пришел на работу, а под дверь насрали. Ну, хм, бывает.

Надо бы убрать.
Беру пластиковый совок, чищу всё это. А оно примерзло к совку.

Что ж, иду искать, как бы это пофиксить.
Через 5 минут возвращаюсь с намерением выкинуть совок. а его нет.

Спёрли.
Февральским утром. На безлюдном рынке. Совок с говном.
ОК.

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Угадайте национальность

Что такое скоуп проекта. Смотреть фото Что такое скоуп проекта. Смотреть картинку Что такое скоуп проекта. Картинка про Что такое скоуп проекта. Фото Что такое скоуп проекта

Все трое нападавших были задержаны полицейскими на месте.

По данным Телеграм-канала «112», это 18-летние Владислав Смирнов и Владислав Яковцев.

Два сапога

Моя знакомая очень переживала за сына. Толстый, нелепый, застенчивый, не от мира сего. В тридцать с лишним никаких отношений с женщинами. То есть никакого опыта вообще, или настолько незначительное, что мама не в курсе. Зарабатывает, правда, хорошо. Купил трехкомнатную квартиру, а что толку, если в кухне только коробки от пиццы, в спальне – матрац на полу, а единственная жилая комната – игровая? Там суперкомпьютер, супермышь, суперколонки, экранов как в ЦУПе и кресло как в космическом корабле. В этом кресле и сидит с вечера до середины ночи и все выходные. Играет во что-то, в игре он суперкрут. Прячется от реальной жизни.

Следующая новость – Лана приезжает на рождественские каникулы. Владик совсем двинулся в предвкушении. Перекрасил стены в квартире. Купил мебель во все комнаты, до этого пять лет руки не доходили. Скачал рецепты из интернета, пытается готовить полезное. Даже в спортзал сходил. Ольга в панике: что там выяснится, какие черти из девушки полезут? Даже если просто влюбилась по молодости в экранный образ, то ведь увидит Владика живьем, мгновенно разочаруется и сбежит. Поймет, что он ей не ровня. А у мальчика травма на всю оставшуюся жизнь.

После Нового года я встретил Ольгу, спрашиваю:

– Как там Владик с девушкой?

– Ой, – говорит, – тьфу-тьфу, не сглазить бы. Я как только ее увидела, сразу от сердца отлегло. Мы же ее видели только через камеру, в наушниках и в кресле. А она, оказывается, хромая. И одного уха нет с рождения. Вот и всё. Ровня.

Два года прошло. Живут. Ходят теперь в рейды из одной комнаты, спина к спине. К свадьбе готовятся, должен весь клан приехать.

Источник

Всё, что вы хотели знать об областях видимости в JavaScript (но боялись спросить)

У JS есть несколько концепций, связанных с областью видимости (scope), которые не всегда ясны начинающим разработчикам (и иногда даже опытным). Эта статья посвящена тем, кто стремится погрузиться в пучину областей видимости JS, услышав такие слова, как область видимости, замыкание, “this”, область имён, область видимости функции, глобальные переменные, лексическая область видимости, приватные и публичные области… Надеюсь, по прочтению материала вы сможете ответить на следующие вопросы:

— что такое область видимости?
— что есть глобальная/локальная ОВ?
— что есть пространство имён и чем оно отличается от ОВ?
— что обозначает ключевое слово this, и как оно относится с ОВ?
— что такое функциональная и лексическая ОВ?
— что такое замыкание?
— как мне всё это понять и сотворить?

Что такое область видимости?

В JS область видимости – это текущий контекст в коде. ОВ могут быть определены локально или глобально. Ключ к написанию пуленепробиваемого кода – понимание ОВ. Давайте разбираться, где переменные и функции доступны, как менять контекст в коде и писать более быстрый и поддерживаемый код (который и отлаживать быстрее). Разбираться с ОВ просто – задаём себе вопрос, в какой из ОВ мы сейчас находимся, в А или в Б?

Что есть глобальная/локальная ОВ?

Не написав ни строчки кода, мы уже находимся в глобальной ОВ. Если мы сразу определяем переменную, она находится в глобальной ОВ.

Глобальная ОВ – ваш лучший друг и худший кошмар. Обучаясь работе с разными ОВ, вы не встретите проблем с глобальной ОВ, разве что вы увидите пересечения имён. Часто можно услышать «глобальная ОВ – это плохо», но нечасто можно получить объяснение – почему. ГОВ – не плохо, вам нужно её использовать при создании модулей и API, которые будут доступны из разных ОВ, просто нужно использовать её на пользу и аккуратно.

Все мы использовали jQuery. Как только мы пишем

мы получаем доступ к jQuery в глобальной ОВ, и мы можем назвать этот доступ пространством имён. Иногда термин «пространство имён» используют вместо термина ОВ, однако обычно им обозначают ОВ самого уровня. В нашем случае jQuery находится в глобальной ОВ, и является нашим пространством имён. Пространство имён jQuery определено в глобальной ОВ, которая работает как ПИ для библиотеки jQuery, в то время как всё её содержимое наследуется от этого ПИ.

Что такое локальная ОВ?

Локальной ОВ называют любую ОВ, определённую после глобальной. Обычно у нас есть одна ГОВ, и каждая определяемая функция несёт в себе локальную ОВ. Каждая функция, определённая внутри другой функции, имеет своё локальное ОВ, связанное с ОВ внешней функции.

Если я определю функции и задам внутри переменные, они принадлежат локальной ОВ. Пример:

Все переменные из ЛОВ не видны в ГОВ. К ним нельзя получить доступ снаружи напрямую. Пример:

Переменная “name” относится к локальной ОВ, она не видна снаружи и поэтому не определена.

Функциональная ОВ.

Все локальные ОВ создаются только в функциональных ОВ, они не создаются циклами типа for или while или директивами типа if или switch. Новая функция – новая область видимости. Пример:

Так просто можно создать новую ОВ и локальные переменные, функции и объекты.

Лексическая ОВ

Если одна функция определена внутри другой, внутренняя имеет доступ к ОВ внешней. Это называется «лексической ОВ», или «замыканием», или ещё «статической ОВ».

С лексической ОВ довольно просто работать – всё, что определено в ОВ родителя, доступно в ОВ ребенка. К примеру:

В обратную сторону это не работает:

Всегда можно вернуть ссылку на “name”, но не саму переменную.

Последовательности ОВ

Последовательности ОВ определяют ОВ любой выбранной функции. У каждой определяемой функции есть своя ОВ, и каждая функция, определяемая внутри другой, имеет свой ОВ, связанный с ОВ внешней – это и есть последовательность, или цепочка. Позиция в коде определяет ОВ. Определяя значение переменной, JS идёт от самой глубоко вложенной ОВ наружу, пока не найдёт искомую функцию, объект или переменную.

Замыкания

Живут в тесном союзе с лексическими ОВ. Хорошим примером использования является возврат ссылки на функцию. Мы можем возвращать наружу разные ссылки, которые делают возможным доступ к тому, что было определено внутри.

Чтобы вывести на экран текст, недостаточно просто вызвать функцию sayHello:

Функция возвращает функцию, поэтому её надо сначала присвоить, а потом вызвать:

Можно конечно вызвать замыкание и напрямую:

Можно догадаться, что упрощённо их код выглядит примерно так:

Функция не обязана ничего возвращать, чтобы быть замыканием. Любой доступ к переменным извне текущей ОВ создаёт замыкание.

ОВ и ‘this’

Каждая ОВ назначает своё значение переменной “this”, в зависимости от способа вызова функции. Мы все использовали ключевое слово this, но не все понимают, как оно работает и какие есть отличия при вызовах. По умолчанию, оно относится к объекту самой внешней ОВ, текущему окну. Пример того, как разные вызовы меняют значения this:

Встречаются и проблемы со значением this. В следующем примере внутри одной и той же функции значение и ОВ могут меняться:

Здесь мы создали новую ОВ, которая вызывается не из обработчика событий, а значит, относится к объекту window. Можно, например, запоминать значение this в другой переменной, чтобы не возникало путаницы:

Иногда есть необходимость менять ОВ в зависимости от того, что вам нужно.
В примере:

Значение this не относится к перебираемым элементам, мы ничего не вызываем и не меняем ОВ. Давайте посмотрим, как мы можем менять ОВ (точнее, мы меняем контекст вызова функций).

.bind() не вызывает функцию, а просто привязывает значения переменных перед её вызовом. Как вы знаете, мы не можем передавать параметры в ссылки на функции:

Это можно исправить, создав новую вложенную функцию:

Приватные и публичные ОВ

В JavaScript, в отличии от многих других языков, нет понятий публичных и приватных ОВ, но мы можем их эмулировать при помощи замыканий. Для создания приватной ОВ мы можем обернуть наши функции в другие функции.

Но вызвать эту функцию напрямую нельзя:

Вот вам и приватная ОВ. Если вам нужна публичная ОВ, воспользуемся следующим трюком. Создаём пространство имён Module, которое содержит всё, относящееся к данному модулю:

Директива return возвращает методы, доступные публично, в глобальной ОВ. При этом они относятся к нужному пространству имён. Модуль Module может содержать столько методов, сколько нужно.

Не нужно стараться вываливать все методы в глобальную ОВ и загрязнять её. Вот так можно организовать приватную ОВ, не возвращая функции:

Мы можем вызвать publicMethod, но не можем privateMethod – он относится к приватной ОВ. В эти функции можно засунуть всё что угодно — addClass, removeClass, вызовы Ajax/XHR, Array, Object, и т.п.

Интересный поворот в том, что внутри одной ОВ все функции имеют доступ к любым другим, поэтому из публичных методов мы можем вызывать приватные, которые в глобальной ОВ недоступны:

Это повышает интерактивность и безопасность кода. Ради безопасности не стоит вываливать все функции в глобальную ОВ, чтобы функции, которые вызывать не нужно, не вызвали бы ненароком.

Пример возврата объекта с использованием приватных и публичных методов:

Удобно начинать название приватных методов с подчёркивания, чтобы визуально отличать их от публичных:

Удобно также возвращать методы списком, возвращая ссылки на функции:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *