скоуп задач что это
Словарик айтишника или Что? Где? Куда? Часть 1
«Привет! Добро пожаловать! Спасибо, что приняла наш оффер. Пойдем знакомиться с твоей командой. У них как раз сейчас дейли. Ты вышла под конец спринта, поэтому пока работы для тебя не запланировали. Как стендап закончится, можешь почитать спеки, командные окиары и просмотреть бэклог на следующий спринт. По всем вопросам обращайся к своему пио.»
Язык айтишников
Каждый, кто работает в IT, непременно сталкивался с профессиональным жаргоном и компьютерным сленгом. Его можно любить или ненавидеть, принимать или терпеть, но непреложным остается факт — IT-жаргон существует и от него никуда не деться.
Когда приходишь в новую компанию, на тебя наваливается куча незнакомых слов. Кажется, их так много, что потребуется немало времени, чтобы понять и выучить их все. Многие слова ты уже знаешь, о смысле других догадываешься, часть из них является англицизмами, поэтому догадаться об их значении несложно Первая реакция — неприятие: «Зачем использовать английские слова в русский речи, когда есть достаточно русских альтернатив?» Потом ты пытаешься сохранить чистоту языка. В итоге, начинаешь говорить так же, как и все. Это неизбежно.
Профессиональный жаргон существует не для того, чтобы испортить русский язык. Он позволяет ускорить устное общение IT-специалистов и наладить их взаимопонимание. Обычно слова получаются короткими и емкими. Иногда одно слово заключает в себе целую фразу. Поэтому польза в них, на мой взгляд, есть.
Я послушала, как говорят разработчики в Wrike, и составила словарик из самых распространенных слов. Слова собраны по тематическим группам.
Scrum-терминология
Scrum — это методология по управлению проектами. Набор принципов, ценностей, политик, ритуалов для организации работы. В скраме полно терминов, но в ежедневный обиход попала и закрепилась только часть из них.
Бэклог
От англ. backlog (дословно — очередь работ) — еще не запланированный объем работы, который требуется выполнить команде. Каждая созданная задача вначале попадает в бэклог, а потом уже в спринт.
Как и в случае со спринтом, термин используется и в отрыве от скрама. Часто бэклогом называют отложенные задачи. Которые сделать нужно, но не сейчас.
Гол, голевой
От англ. goal (дословно — цель) — цель спринта (бывает одна или несколько), которую команда берется сделать. Цель состоит из ряда задач, которые нужно выполнить, чтобы его достигнуть.
Слово употребляется и как существительное, и как прилагательное. Может быть множественного числа.
Дейли
От англ. daily (дословно — ежедневно) — ежедневные короткие (от 5 до 30 минут) встречи команды с целью поделиться прогрессом по выполненным задачам за предыдущий день и озвучить план работ на текущий день. Также дейли могут называть стендапом (от daily standup), потому что обычно такие встречи происходят стоя — для большей эффективности.
Коммититься
Глагол от англ. существительного commitment (дословно — ответственность). Коммититься — значит обещать выполнить определенный объем работы в оговоренные сроки. Это не просто обещание, это сознательное обязательство перед собой и командой. Человек, который закоммитился, обязан сделать всё возможное, чтобы выполнить то, что сам и пообещал реализовать.
Спринт
От англ. sprint (дословно — бег на короткую дистанцию) — заданный отрезок времени, за который нужно выполнить запланированный объем работы, чтобы в конце этого отрезка был ожидаемый результат.
Термин используют не только те, кто работает по скраму, но и те, кто просто хочет организовать свою работу и сформировать ясные рамки, во время которых должны быть выполнены задачи.
Инструменты для работы
Технические, информационные и вспомогательные средства и приложения для работы.
Ветка
От англ. branch (дословно — ветка) — тот редкий случай, когда в ходу русский перевод термина. Веткой (термин git) называют полную копию проекта, в которой ведется разработка. В проекте может быть создано много веток, что позволяет работать одновременно с разными частями кода. Потом все ветки загружаются в мастер. Процесс «ответвления» иногда называют «бранчеванием», уже как раз от branch.
От англ. mock-up (дословно — эскиз) — макет с UX-дизайном для разработки. Несмотря на то, что слово дословно переводится как «эскиз» или «прототип», в Wrike моками называют готовые проработанные макеты с дизайном.
От англ. production (дословно — промышленная среда) — ветка с рабочей версией продукта, которую видят пользователи. Это окончательная точка куда попадает результат разработки. Иногда так же называют мастер.
От англ. reference (дословно — пример) — схожий функционал или внешний вид, который используется для ориентира. Он служит для сравнения.
Спека
От англ. specification (дословно — спецификация) — документ с подробным описанием требований, условий и технических характеристик, как должен работать разрабатываемый функционал.
Таска
От англ. task (дословно — задача) — задача, заведенная или планируемая на любого работника.
Разработка
Термины, употребляющиеся разработчиками при работе над задачами.
От англ. boost (дословно — ускорение) — процесс повышения производительности, ускорение загрузки.
Катить
Отправлять готовую работу в деплой, предпринимать шаги для подготовки ветки к мерджу в продуктовую ветку.
Комплитить
От англ. complete (дословно — заканчивать) — завершать задачу, закрывать задачу, когда она полностью готова.
Консистентность
От англ. consistency (дословно — системность) — общее единообразие во всех частях продукта.
Матчится
От англ. match (дословно — совпадать) — полное соответствие чего-либо с чем-либо. Процесс приведения к единообразию.
Пинать
Термин, подобный глаголу «пинать», который также имеет значение «делать» и «работать». Конкретное значение определяется по приставке. Подопнуть — сделать немного, допинать — доделать.
Ручка
От англ. handler (дословно — обработчик) — бэкэнд-термин, означающий ответ от сервера, в котором приходят данные.
Скоуп
От англ. scope (дословно — объем) — набор фич и частей продукта, закрепленных за отдельной командой.
От англ. feature (дословно — характеристика) — определенная часть или деталь от общего продукта, которая разрабатывается изолированно.
От англ. flow (дословно — течение) — порядок действий при работе над задачей. Например, вначале задача берётся в разработку, потом проходит ревью, далее тестируется и т.д.
Должности
Некоторые должности, названия которых вошли в обиход в виде сокращений с английского.
Девопс
От англ. DevOps, сокращенно от Developer Operations (дословно — интеграция разработки и эксплуатации) — специалист, занимающийся внедрением DevOps-методологии. Полное название должности — DevOps-инженер, но в речи вторую часть всегда отбрасывают.
От англ. PO, сокращенно от Product Owner (дословно — владелец продукта) — роль по скрам-методологии, человек, ответственный за проработку продукта и распределение бэклога. Он знает о требованиях пользователя и возможностях команды.
От англ. PM, сокращенно от Product Manager (дословно — менеджер продукта) — менеджер, который отвечает за продукт, его обязанности совпадают с обязанностями пио, отличие только в том, что это название должности, а не роли в скраме. Так же, как пио, пиэмов могут называть продакт.
Организационное
Термины, относящиеся к организации работы, а также термины, употребляющиеся в неформальной речи при обсуждении чего-либо.
Дейоф
От англ. day-off (дословно — выходной) — просто выходной.
Драйвер
От англ. driver (дословно — водитель) — человек, который берет на себя инициативу управления проектом/процессом/задачей. В его обязанности входит следить за тем, как протекает созданный им процесс, и руководить им. Он мотивирует других людей выполнять работу для достижения поставленных целей.
Консёрн
От англ. concern (дословно — тревога, участие) — в английском языке слово «консёрн» имеет много различных значений, при этом очень часто употребляется в русской речи. Какое именно значение вкладывает в него автор, известно только ему самому. Иногда — это смесь многих значений, таких как: особый интерес, беспокойство, цель, настороженность, опасение и т.д.
Окиары
От англ. OKR, сокращенно от Objectives and Key Results (дословно — цели и ключевые результаты) — система по постановке и достижению целей. Она нужна для синхронизации работы всех участников компании/отдела/команды, чтобы все двигались в одном направлении, с понятными приоритетами и постоянным ритмом. В отличие от KPI, это амбициозное целеполагание, достижение окиаров (окров) на 70-80% — отличный результат.
Оффер
От англ. offer (дословно — предложение) — предложение о работе / приглашение на работу.
Поинт
От англ. point (дословно — точка) — чаще всего употребляется в значении «точка зрения», сокращенно от point of view. Также в значениях: «суть», «смысл», «довод».
Не говори красиво, говори правильно. или Глоссарий управления проектами
Начнем эту заметку с рассказа об одном забавном эпизоде. Однажды в нашей компании проходили практику студенты-дипломники, специализирующиеся на управлении проектами.
|
Григорий Львович Ципес, ведущий системный аналитик компании IBS, GTsipes@ibs.ru Александр Самуилович Товб, руководитель проектов компании IBS, A_Tovb@ibs.ru |
Начнем эту заметку с рассказа об одном забавном эпизоде. Однажды в нашей компании проходили практику студенты-дипломники, специализирующиеся на управлении проектами. Выдавая им задание, руководитель практики (один из авторов этой заметки) попросил описать scope проекта (он так и сказал — скоуп). «А что такое scope?» — осторожно поинтересовалась одна девушка. «О, scope — это. » — ответил руководитель и нарисовал руками в воздухе нечто, напоминающее средних размеров глобус. «Понятно, — грустно сказала девушка. — Нам в институте так же объясняли».
Ситуация очень характерная и довольно опасная. Есть некий термин, употребляемый в англоязычных источниках и не имеющий очевидного и однозначного перевода на русский язык в контексте управления проектами. На профессиональном жаргоне мы привыкли пользоваться этим термином на языке оригинала. Действительно, гораздо удобнее сказать scope, чем какое-нибудь достаточно громоздкое «содержание и границы». Если кому-то непонятно, то всегда можно объяснить, хотя бы с помощью жестов. А приводит все это к тому, что некоторое время спустя точного значения термина никто уже не помнит, каждый трактует его по-своему, и при этом все думают, что понимают друг друга!
Прибавьте к этому еще и то, что и на языке оригинала многие термины трактуются вовсе не однозначно. В сравнительном словаре Макса Вайдемана [MW], опирающемся на более полусотни источников, для многих терминов приводится по 5-6 различных определений. Русскоязычные глоссарии, которых тоже набирается немалое количество, во многих случаях запутывают ситуацию еще больше.
Теперь взглянем на эту проблему с точки зрения стандарта управления проектами. Стандарты — это документы, которые не должны допускать различных трактовок и которые должны быть понятны каждому сотруднику предприятия. Из этого следуют, по крайней мере, два вывода, существенные для темы нашей заметки. Во-первых, стандарт должен содержать определения основных используемых терминов, и, во-вторых, эти термины не следует применять ни на английском языке (хотя упоминание английского аналога, безусловно, полезно), ни в их транслитерации на русский язык.
Авторы стандарта вольны решать, каким путем они пойдут при формировании глоссария — подберут ли готовые определения на русском языке, сделают ли собственный перевод с английского или, может быть, предложат свои определения, адаптированные к профессиональной среде и квалификации персонала предприятия. Очевидно одно, в любом случае задача эта не будет простой.
Приводя в этой заметке небольшой глоссарий, мы ни в коей мере не претендуем ни на полноту, ни на анализ или критику включенных в него определений. Единственная его задача — дать объяснение терминам, которые мы использовали в наших заметках, и соотнести их с часто употребляемыми аналогами.
КРАТКИЙ СРАВНИТЕЛЬНЫЙ ГЛОССАРИЙ
Источники, по которым цитируются определения:
Поделитесь материалом с коллегами и друзьями
Зоны ответственности в проекте
Вопрос границ и зон ответственности сам по себе глобальный. Для человека, например, формирование личных границ является этапом взросления и становления личности.
Но если посмотреть на границы в контексте IT-проектов, то окажется, что из-за не самых качественных границ регулярно возникают проблемы. Они приводят к чему угодно: от потери ценных кадров с негативным фидбеком о работе в компании до провала проектов.
Ниже попробую порассуждать, когда с этими проблемами сталкиваются, предложу пример из опыта и вариант фиксации границ зон ответственности.
Когда начинаются проблемы границ
В проектах автоматизации присутствует примерно одинаковый набор функциональных задач. На начальных этапах проекта или в маленьких компаниях и командах есть один-два-три человека, которые делают работу, начиная управлением продукта и маркетингом, заканчивая full stack разработкой. И работают без жалоб, при этом решая вопросы общением.
Со временем наступает ситуация, когда приходится заняться расширением команды, например:
Уровень зрелости решения достигает необходимости повышения качества отдельных функций
Людей перестаёт хватать, чтобы делать функции самостоятельно
Возникает потребность в полноценном выполнении некоторых функций, которые делались по совместительству
И тогда команда сталкивается с проблемами роста:
Слишком много времени начинает уходить на взаимодействие, встречи забивают календарь, а работать некогда
Возникают конфликты и жаркие споры при решении тех или иных вопросов
Одну и ту же работу делают разные люди
Давайте на примере
Достану из чертогов памяти один пример автоматизации, на котором было не всё гладко. Начинался он как любой другой проект. Со стартом проекта выделялась небольшая команда, решение начинало потихоньку развиваться, и дела как-то делались.
С ростом проекта задач становилось больше, что привело и к увеличению команды. И начались общие претензии по качеству работы, а также конкретные жалобы на:
Менеджеров — не делали работу хорошо
Заказчиков — бесконечно меняли требования
Аналитиков — не успевали в срок
Круговорот недовольства в проекте
Итого напряжение в команде росло, в проекте менялись менеджеры, а сроки соблюдались с большим трудом. А я, как тимлид аналитики, получал негативную обратную связь от падаванов, которые жаловались на процессы и говорили, что «так работать нельзя».
При погружении в проект обнаружилась проблема — слишком много времени уходило на коммуникацию, и при этом регулярно возникали вопросы типа «а кто решил, что делаем именно так?». Эту ситуацию и попробовали решить, зафиксировав границы ролей.
Как можно распределять ответственность
Задача разделения ответственности раскладывается на следующий список подзадач:
Зафиксировать список ролей
Для каждой роли зафиксировать набор функций, за которые она отвечает
Базовым подходом для решения такой задачи можно считать RACI-матрицу. Концептуально список ролей не зафиксирован жестко и может быть различным, но базовыми считаются:
Responsible — Исполнитель, ответственен за некоторый участок работы, который доверен только ему
Accountable — Ответственный, управляет процессом или является его владельцем
Consulted — Эксперт, обладает экспертизой в том или ином вопросе
Informed — Информирующий, обладает информацией по процессу, может косвенно влиять на результат
Но если попытаться применить эту модель, то у неё всплывают свои минусы: с одной стороны, слегка избыточна и сложна для построения, с другой — недостаточно атомарна, чтобы явно обозначить набор функций, которыми занимается, например, та же аналитика:
Аналитик работает как “Исполнитель” по своим задачам
Та же аналитика, особенно лид аналитики, “Ответственна” за свои процессы
Аналитик часто “Эксперт” в тех или иных вопросах
Аналитик также “Информирующий” по вопросам взаимодействия внутри команды
Альтернатива
Если всё-таки отталкиваться от функций, то у них есть:
Ответственный — один конкретный специалист или некоторая роль, которая отвечает за финальный результат
Все остальные — в силу своей заинтересованности могут так или иначе влиять на результат
Получается следующее представление границ каждой функции:
Круги ответственности
Зона ответственности — та часть деятельности, за которую ответственен именно специалист. Чтобы реально что-то менять и чем-то управлять, та или иная функция должна быть именно в этой зоне
Зона влияния — область, которая находится рядом с зоной ответственности специалиста. Здесь специалист может советовать как эксперт или просто о чём-то информировать, задать любой вопрос и предложить любой новый подход, не неся при этом финальной ответственности
Зона смирения — область, в которой нет рычагов влияния. Сюда попадают, если все попытки повлиять на что-то исчерпаны, и больше вариантов нет. Здесь есть две опции — «понять, принять и смириться» или «уйти» из проекта или из компании.
Подход кажется удобным, если список функций и ролей известен. Например, в компаниях, где есть более-менее устоявшиеся процессы. Для каждой функции определяется ответственный, а все остальные роли при наличии желания могут пытаться влиять на выполнение функции и на процессы.
И получается вполне прозрачный механизм. Если хочется что-то изменить, то вариант один — сделать это своей зоной ответственности.
Так что с примером?
Если вернуться к примеру с этими зонами, то:
Проверили, что участники команды понимают существующие роли в проекте
Для каждой роли зафиксировали список функций, за которые эта роль ответственна
Договорились, что остальное — зона влияния, где каждый может что-то пытаться делать, но финальное решение не принимает и ответственность не несёт
Имели три конфликтующие проектные роли — аналитика, проектный менеджмент и заказчик.
Сначала поговорили с аналитиками. Они, согласно предыдущей статье «Аналитик в автоматизации — кто он и чем занимается», специалисты широкого спектра. Поэтому, если упростить, зафиксировали, что аналитика занимается:
Фиксацией разных требований и ограничений
Формализацией, проектированием и оптимизацией бизнес-процессов
Разработкой моделей данных (ER-диаграмм)
Разработкой различных постановки задач или спецификаций
Дальше менеджеры. Мы жёстко разделили роли аналитики и менеджера. И поэтому в зоне ответственности менеджера остались вполне себе стандартные менеджерские вопросы, на которые заказчик и аналитика могли влиять:
Формирование проектной команды
Организация процессов взаимодействия
Фиксация скоупа проекта и приоритетов задач
Фиксация и отслеживание сроков
Организация работы людей в проекте
Ну а заказчик был определён и зафиксирован как участник, который несёт ответственность за продукт. За ним финальное решение о том, куда пойдёт продукт. Аналитик, как эксперт, влияет на продукт — предлагает новые фичи, рекомендует различные подходы и тенденции.
Что получилось?
Нормально расставленные и зафиксированные границы — штука хорошая. Даже если кто-то один так себе границы соблюдает, остальные участники команды помогают процессу работать верно.
В итоге, пообщавшись и договорившись по задачам, удалось перевести работу в нужное и продуктивное русло:
Прекратилась передача задач и приоритетов напрямую заказчиком в аналитику
Менеджер смог делать свою работу и управлять заказчиком, его бэклогом, сроками и ожиданием
Заказчик получил свои (корректные) рычаги влияния на задачи
Аналитики знают, что должны сделать, если видят проблему и хотят что-то изменить в решении или в процессах
Исправилось взаимодействие аналитики и менеджмента — исправилось и остальное
Так же сделали и с другими ролями в проекте, например, с дизайнерами, разработчиками, тестированием. И главное, чтобы границы не ломались, договорились до следующего:
Новеньких сразу обучаем принятым границам между ролями
Поощряем работу в зоне влияния, поощряем эскалацию
На периодических со специалистами встречах собираем обратную связь и, при необходимости, вносим точечные правки
И общий профит
На уровне выше конкретного проекта также есть профит соблюдения общих границ. Например, для нас, как для компании-интегратора:
Упрощается запуск проектов, так как проекты работают по одному шаблону
Проектную команду расширять легче, так как исключается длительное погружение в процессы конкретного проекта
Ротация сотрудников между проектами возможна и работает
Новому человеку проще разобраться, как работает компания
Ясны границы, в которых можно влиять на процессы
Ценность сотрудника для компании не зависит от конкретного проекта
А можно без этого обойтись?
Да, можно и без таких формальных заморочек. Например, в in house, где каждый проект часто уникальная снежинка, или в небольшой команде. Как замечено в одном из комментариев к прошлой статье, в маленьких компаниях часто обходятся без аналитиков. Да и без узких специалистов вообще.
При этом важно понимать, что функции есть всегда. Просто один человек может выполнять функции нескольких ролей. И когда в команду приходит новый человек, особенно если это новая выделенная роль в команде, важно зафиксировать, чем этот человек будет заниматься и какие полномочия ему передаются.
И стоит ещё сказать, что описанный подход к разделению ответственности, наверняка не единственно верный. Сейчас пришли к этому. Может быть, через какое-то время поймём, что здесь тоже всё не так гладко. Но это не значит, что мы откажемся от фиксации функций и от того, чтобы ответственность за них делить между ролями. Просто может быть, что попилим как-то иначе.
Всё, что вы хотели знать об областях видимости в 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, и т.п.
Интересный поворот в том, что внутри одной ОВ все функции имеют доступ к любым другим, поэтому из публичных методов мы можем вызывать приватные, которые в глобальной ОВ недоступны:
Это повышает интерактивность и безопасность кода. Ради безопасности не стоит вываливать все функции в глобальную ОВ, чтобы функции, которые вызывать не нужно, не вызвали бы ненароком.
Пример возврата объекта с использованием приватных и публичных методов:
Удобно начинать название приватных методов с подчёркивания, чтобы визуально отличать их от публичных:
Удобно также возвращать методы списком, возвращая ссылки на функции: