JavaScript заметки
Відкрити в Telegram
Регулярные заметки по практическому JavaScript. Обучащию посты позволят прокачать навыки во Frontend-разработке. Можно почитать пока компилируется проект :) Сотрудничество: @noname_media Канал на бирже: telega.in/channels/notesjs/card?r=Wj7h1mbl
Показати більше7 368
Підписники
-124 години
-167 днів
-5730 днів
Архів дописів
7 368
Продвинутая реализация каррирования
Выше представлен "продвинутый" вариант функции каррирования.
Когда мы запускаем её, есть две ветви выполнения
if:
1. Вызвать сейчас: если количество переданных аргументов args совпадает с количеством аргументов при объявлении функции (func.length) или больше, тогда вызов просто переходит к ней.
2. Частичное применение: в противном случае func не вызывается сразу. Вместо этого, возвращается другая обёртка pass, которая снова применит curried, передав предыдущие аргументы вместе с новыми. Затем при новом вызове мы опять получим либо новое частичное применение (если аргументов недостаточно) либо, наконец, результат.
На картинке выше показано, что произойдёт в случае sum(a, b, c). У неё три аргумента, так что sum.length = 3.
#разное #каррирование7 368
С чего начать изучать IT, чтобы стать востребованным специалистом?
Всё что нужно: ноутбук, Telegram, подписка на @HowTo_IT — канал, который за руку доведёт тебя до первых денег в IT-индустрии.
⤷ Внутри:
• Пошаговая теория;
• Онлайн-тренажёры для первых шагов в написании кода;
• Видеообучения, гайды, обзоры программ;
• Примеры плохих и хороших кодов;
• Уроки FrontEnd- и BackEnd-разработки.
И всё это удобно искать по хэштегам.
👨💻 Начни путь с основ до работы в топовой IT-компании!
7 368
Proxy: Валидация с ловушкой «set»
Допустим, мы хотим сделать массив исключительно для чисел. Если в него добавляется значение иного типа, то это должно приводить к ошибке.
Ловушка
set срабатывает, когда происходит запись свойства.
- set(target, property, value, receiver):
- target – это оригинальный объект, который передавался первым аргументом в конструктор new Proxy,
- property – имя свойства,
- value – значение свойства,
- receiver – аналогично ловушке get, этот аргумент имеет значение, только если свойство – сеттер.
Ловушка set должна вернуть true, если запись прошла успешно, и false в противном случае (будет сгенерирована ошибка TypeError).
#разное #proxy #ловушки7 368
Как зарабатывать на разработке сайтов в 2022 году?
👉 Так же, как я это делал в 2021, 2020, 2019 и так далее на протяжении 8-ми лет!
👉 Оказывая услуги полного цикла с помощью зеро код инструментов (для ускорения процесса).
На моем авторском канале уже есть вся необходимая информация раскрывающая все нюансы и подробности Внеконкурентного Подхода в веб разработке.
Подхода, позволяющего зарабатывать деньги удаленно, без использования фриланс бирж, где вместо заработка скорее получишь нервный срыв или чего похуже, особенно в текущих реалиях.
Вся основная суть написана в закрепе.
Переходите, подписывайтесь и тогда вы со всеми подробностями узнаете крутой метод по выходу из матрицы.
Канал: Внеконкурентный Подход
7 368
Proxy: Значение по умолчанию с ловушкой «get»
Чаще всего используются ловушки на чтение/запись свойств.
Чтобы перехватить операцию чтения,
handler должен иметь метод get(target, property, receiver).
Он срабатывает при попытке прочитать свойство объекта, с аргументами:
- target – это оригинальный объект, который передавался первым аргументом в конструктор new Proxy,
- property – имя свойства,
- receiver – если свойство объекта является геттером, то receiver – это объект, который будет использован как this при его вызове. Обычно это сам объект прокси (или наследующий от него объект). Прямо сейчас нам не понадобится этот аргумент, подробнее разберём его позже.
Давайте применим ловушку get, чтобы реализовать «значения по умолчанию» для свойств объекта.
Например, сделаем числовой массив, так чтобы при чтении из него несуществующего элемента возвращался 0.
#разное #proxy #ловушки7 368
Вы тоже слышали, что стать айтишником - сложно? Знайте, это ложь.
Выучить 2-3 языка, устроиться на работу и получать от $900 можно за полтора месяца. Главное ─ чтобы всё объяснили на примерах и показали, что к чему.
За этим идите в канал «Точка входа в IT». Здесь есть короткие уроки, шпаргалки по коду и наглядные примеры, что нужно делать, чтобы всё работало.
Идеально для тех, кто пока чайник, но хочет стартонуть без дорогих курсов и прочей фигни. Заходите: @it_tochka
7 368
Proxy: ловушки
Proxy – это особый объект, у него нет собственных свойств. С пустым handler он просто перенаправляет все операции на target.
Чтобы активировать другие его возможности, добавим ловушки.
Для большинства действий с объектами в спецификации JavaScript есть так называемый «внутренний метод», который на самом низком уровне описывает, как его выполнять. Например, [[Get]] – внутренний метод для чтения свойства, [[Set]] – для записи свойства, и так далее. Эти методы используются только в спецификации, мы не можем обратиться напрямую к ним по имени.
Ловушки как раз перехватывают вызовы этих внутренних методов. Полный список методов, которые можно перехватывать, перечислен в спецификации Proxy, а также в таблице ниже.
Для каждого внутреннего метода в этой таблице указана ловушка, то есть имя метода, который мы можем добавить в параметр handler при создании new Proxy, чтобы перехватывать данную операцию.
P.S. На картинке отображена таблица со всеми доступными ловушками.
#разное #proxy #ловушки7 368
7 368
Proxy
Объект
Proxy «оборачивается» вокруг другого объекта и может перехватывать (и, при желании, самостоятельно обрабатывать) разные действия с ним, например чтение/запись свойств и другие. Далее мы будем называть такие объекты «прокси».
Прокси используются во многих библиотеках и некоторых браузерных фреймворках.
Синтаксис:
let proxy = new Proxy(target, handler);
- target – это объект, для которого нужно сделать прокси, может быть чем угодно, включая функции.
- handler – конфигурация прокси: объект с «ловушками» («traps»): методами, которые перехватывают разные операции, например, ловушка get – для чтения свойства из target, ловушка set – для записи свойства в target и так далее.
При операциях над proxy, если в handler имеется соответствующая «ловушка», то она срабатывает, и прокси имеет возможность по-своему обработать её, иначе операция будет совершена над оригинальным объектом target.
#разное #proxy7 368
Асинхронные итераторы
Асинхронные итераторы похожи на обычные итераторы, но имеют некоторые синтаксические отличия.
Чтобы сделать объект итерируемым асинхронно:
1. Используется
Symbol.asyncIterator вместо Symbol.iterator
2. next() должен возвращать промис.
3. Чтобы перебрать такой объект, используется цикл for await (let item of iterable).
На картинке выше вы можете увидеть итерируемый объект range.
#генераторы #асинхронные_итераторы7 368
Цепочка промисов
Идея состоит в том, что результат первого промиса передаётся по цепочке обработчиков
.then.
Поток выполнения такой:
- Начальный промис успешно выполняется через 1 секунду (*),
- Затем вызывается обработчик в .then (**).
- Возвращаемое им значение передаётся дальше в следующий обработчик .then (***)
- …и так далее.
В итоге результат передаётся по цепочке обработчиков, и мы видим несколько alert подряд, которые выводят: 1 → 2 → 4.
#промисы #цепочка_промисов7 368
Микрозадачи
Асинхронные задачи требуют правильного управления. Для этого стандарт предусматривает внутреннюю очередь
PromiseJobs, более известную как «очередь микрозадач (microtask queue)» (термин V8).
Как сказано в спецификации:
- Очередь определяется как первым-пришёл-первым-ушёл (FIFO): задачи, попавшие в очередь первыми, выполняются тоже первыми.
- Выполнение задачи происходит только в том случае, если ничего больше не запущено.
Или, проще говоря, когда промис выполнен, его обработчики .then/catch/finally попадают в очередь. Они пока не выполняются. Движок JavaScript берёт задачу из очереди и выполняет её, когда он освободится от выполнения текущего кода.
Вот почему сообщение «код выполнен» в примере выше будет показано первым.
#микрозадачи #промисы7 368
Callbacks (Колбэки)
Колбэк функция - это такая функция, которая вызывается после выполнения какой-то асинхронности.
В данном примере описана функция динамической подгрузки скриптов с колбеком, после загрузки. Функция
callback выполнится, когда скрипт будет полностью загружен на странице.
Колбэки используются повсеместно, не только в JavaScript.
#callback #колбэк #продвинутый7 368
Сложно мониторить множество ресурсов чтобы быть в курсе современного фронтенда? 🤯
Канал Frontend Info сделал это за тебя:
✔️ Цикл рендеринга браузера, аппаратное ускорение и уровни компоновщика
✔️ Почему Remix стоит вашего внимания
✔️ Запись докладов React Conf 2021
Каждый день ты будешь получать актуальные статьи, отборные туториалы, видеокурсы и многое другое для твоего развития 🚀
7 368
Промисификация
Промисификация – это длинное слово для простого преобразования. Мы берём функцию, которая принимает колбэк и меняем её, чтобы она вместо этого возвращала промис.
Такие преобразования часто необходимы в реальной жизни, так как многие функции и библиотеки основаны на колбэках, а использование промисов более удобно, поэтому есть смысл «промисифицировать» их.
Например, у нас есть
loadScript(src, callback) (см. левую часть картинки)
Давайте промисифицируем её. Новая функция loadScriptPromise(src) будет делать то же самое, но будет принимать только src (не callback) и возвращать промис (см. правую часть картинки)
#promise #продвинутый7 368
👨🏻💻 no system is safe — канал с бесплатными обучающими материалами для IT специалистов.
- Новости из сферы IT.
- Сотни статей и публикаций с обучающим материалом для ИБ специалистов.
- Подборки полезного материала для IT специалистов любого уровня и направления.
- Хакинг и способы защиты от него.
7 368
Eval: выполнение строки кода
Встроенная функция
eval позволяет выполнять строку кода.
Синтаксис:
let result = eval(code);
Строка кода может быть большой, содержать переводы строк, объявления функций, переменные и т.п.
Результатом eval будет результат выполнения последней инструкции.
Использование
В современной разработке на JavaScript eval используется весьма редко. Есть даже известное выражение – «eval is evil» («eval – это зло»).
Причина такого отношения достаточно проста: давным-давно JavaScript был не очень развитым языком, и многие вещи можно было сделать только с помощью eval. Но та эпоха закончилась более десяти лет назад.7 368
Недавно Илон Маск заявил, что собирается запустить в космос ещё 51 спутник высокоскоростного интернета Starlink. В сумме таких спутников будет уже 1738. Только вот пока обычные люди радуются быстрому беспроводному интернету, эксперты по вопросам кибербезопасности бьют тревогу.
Дело в том, что к спутникам можно легко подключить заражённые IoT-устройства: смарт-часы, умный дом и другие гаджеты, которые не имеют защиты. А уже сколько дел может натворить опытный хакер, можно только догадываться...
Один из худших раскладов — масштабная DDoS-атака из различных точек мира, которую будет невозможно предотвратить. В подробностях о таком раскладе и последствиях можно прочесть в закрепе на этом канале. Там эксперты из сферы кибербезопасности делятся полезной информацией и новостями из мира IT.
