ДЖАВАСКРИПТИЗЕРЫ | КИРИЛЛ ПОЗДНЯКОВ
5.3K subscribers
347 photos
263 links
Меня зовут Кирилл и я Тех Лид. Если по-простому то я fullstack разработчик с большим опытом :)
Создатель и разработчик (реклама): @HelloMeanOfficial
Download Telegram
Что такое Proxy и как его использовать ?

Объект Proxy «оборачивается» вокруг другого объекта и может перехватывать (и, при желании, самостоятельно обрабатывать) разные действия с ним, например чтение/запись свойств и другие. Далее мы будем называть такие объекты «прокси».

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

Для большинства действий с объектами в спецификации JavaScript есть так называемый «внутренний метод», который на самом низком уровне описывает, как его выполнять. Например, [[Get]] – внутренний метод для чтения свойства, [[Set]] – для записи свойства, и так далее. Эти методы используются только в спецификации, мы не можем обратиться напрямую к ним по имени.
👍7
В каком порядке и почему будут вызваны логи в консоль ?

Первые операции это те которые сразу же исполняются в колл стеке, дальше идут микрозадачи ( Promise ), после этого идут уже макрозадачи ( setTimeout, setInterval ).

Изначально после парсинга код попадает в стек. Асинхронный код проходит обработку в веб апи, после этого задача попадает в очередь задач ( там задачи распределяются в очереди между макро и микрозадачами ), после того как задачи в стеке не осталось, задачи из очереди задач идут в стек, там либо окончательно исполняются либо если задача опять асинхронная, то она проходит этот круг заново пока окончательно не исполнится
👍6
Упаковка и Распаковка (Boxing) в JS что это такое ?

Методы – это свойства объектов, в которые записаны функции. Если это так, тогда почему работает такой код: 'hexlet'.toUpperCase();

Из этого кода можно сделать ошибочный вывод что строка это тоже объект, но это не так. В JavaScript строки, логические значения, null и числа реализованы как примитивные значения, у них нет методов. С другой стороны, для каждого такого типа существует собственный конструктор, "упаковывающий" примитивный тип в объект

JavaScript автоматически упаковывает примитивные типы в соответствующие объекты, когда встречает вызовы методов на них (и затем автоматически распаковывает). То есть в действительности, все методы которые мы вызываем на строках, хранятся в прототипе конструктора String. То же самое касается и всех остальных типов

Интересно то, как происходит распаковка. Для этого JavaScript автоматически вызывает метод valueOf() у объекта:
👍8
Как мы можем использовать Symbol с практической точки зрения ?

Symbol.toPrimitive - Определяет свойство с функциональным значением, вызываемое для преобразования объекта в соответствующее примитивное значение. Полезен и относится к теме Упаковки и Распаковки

Symbol.iterator - Хорошо известный символ указывает итератор по умолчанию для объекта.

Symbol.search - Хорошо известный символ указывает метод, который возвращает индекс в строке, соответствующей регулярному выражению. Эта функция вызывается методом String.prototype.search
👍5
Что такое и как использовать Promise ?

Интерфейс Promise (промис) представляет собой обёртку для значения, неизвестного на момент создания промиса. Он позволяет обрабатывать результаты асинхронных операций так, как если бы они были синхронными: вместо конечного результата асинхронного метода возвращается своего рода обещание (дословный перевод слова "промис") получить результат в некоторый момент в будущем.

Promise может находиться в трёх состояниях: ожидание (pending), исполнено (fulfilled), отклонено (rejected)

Promise.all() - возвращает промис, который выполнится тогда, когда будут выполнены все промисы, переданные в виде перечисляемого аргумента, или отклонено любое из переданных промисов.
Promise.allSettled() - возвращает промис, который исполняется когда все полученные промисы завершены
Promise.race() - возвращает выполненный или отклонённый первый промис
Promise.any() - Как только один из промисов (Promise) выполнится успешно
👍7
Что такое генератор ?

Генератор - это функция способная хранить свое состояние, то есть способная останавливаться и заново запускаться

Для объявления генератора используется специальная синтаксическая конструкция: function*, которая называется «функция-генератор».

Основным методом генератора является next(). При вызове он запускает выполнение кода до ближайшей инструкции yield <значение> (значение может отсутствовать, в этом случае оно предполагается равным undefined). По достижении yield выполнение функции приостанавливается, а соответствующее значение – возвращается во внешний код:

Результатом метода next() всегда является объект с двумя свойствами: value, done
Методы:
Generator.prototype.next() - Возвращает значение, полученное выражением yield
Generator.prototype.return() - Возвращает заданное значение и заканчивает генератор
Generator.prototype.throw() - Выдаёт ошибку генератора.
👍6
Что такое каррирование ?

Каррирование – продвинутая техника для работы с функциями. Она используется не только в JavaScript, но и в других языках.
Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как f(a, b, c), а как f(a)(b)(c).
Каррирование не вызывает функцию. Оно просто трансформирует её.

Каррирование либо уменьшение арности функции
👍4
Стрелочные функции и контекст

Контекст - это объект в контексте которого выполняется функция.
Стрелочная функция в отличии от обычной не имеет своего контекста, она берет контекст на уровень выше.

Контекст можно привязать методами: call, apply, bind
Привязка контекста не работает со стрелочными функциями
👍3🤔1
Что такое IIFE и как эти пользоваться ?

Immediately-invoked function expressions (аббревиатура IIFE), что означает функцию, запускаемую сразу после объявления.

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

Здесь создаётся и немедленно вызывается Function Expression. Так что код выполняется сразу же и у него есть свои локальные переменные.
👍4
Давайте знакомиться !
Меня зовут Кирилл.

Я автор этого канала и создатель бота @interviewITBot

Являюсь Senior Full-Stack разработчиком.
Сейчас работаю Тех Лидом в одной из Питерских компаний.

Вот мой тик ток где я создаю свой React за 15 секунд
👍4