Discord чат
Описание, примеры
Оператор void вычисляет выражение и возвращает undefined.
Этот оператор используется для запуска кода, который влечет за собой эффекты, не связанные с возвращаемым значением.
Иногда вызов void(0) используют для получения undefined . В этом случае можно вместо void(0) использовать просто undefined .
При использовании протокола «javascript:(URI)», браузер выполняет код URI и заменяет содержимое документ на возвращенное значение, если оно не undefined .
Поэтому javascript-вызовы заворачивают в void . Особенно часто это делают в букмарклетах.
Кстати, использование протокола javascript: не рекомендуется, так как в современном javascript обычно есть лучшие альтернативы, например события.
См. также
- Букмарклеты и правила их написания /Статья/
- Почему — плохо /Статья/
- Выражения /Стандарт языка/
Приведенный пример использования совершенно невнятный! «Браузер выполняет код и заменяет содержимое полученным значением, если оно НЕ(!) undefined. ПОЭТОМУ(?!) javascript вызовы заворачивают в void. Почему «поэтому»? Ведь сначала сказано, что браузер использует как раз-таки определенное в ходе вычислений значение выражения.
Вот именно для того, чтобы браузер содержимое документа НЕ заменял на результат вычисления выражения, и используется void.Хотя, я согласен — написано не совсем понятно.
Спасибо за статью!
Иногда вызов void(0) используют для получения undefined. В этом случае можно вместо void(0) использовать просто undefined.
Нельзя, потомучто undefined не является кейвордом и его можно переопределить.
Как ты его переопределишь?
Элементарно, например, вот так
hgcdyvfydrdybihgbgfybcgygrygdngcigfgygfygyucgyfgebgy fgcytqvx8ytv fygdwvfvftyfcytfdg cf8f8ytf vtwtcvf yagvyugf uygfyudbgi uvhkghubdhu fuh gyugd uifpg fiag uogb sfiyctsabfcsi dytgusdcbsdfc uybGUTWQGRCPGYFE YUB GIYBGBWG9NGbyf7sbfcgacsvd yUGCVRUBQFEXYDCGcw8yefYTW FDTFD DYTe f cygwq fyt yu fayubfu gfidv uifceayub fy dfvsyicbd yubiuzfyagfyW GFAY7F IKHUGSAICFY8EA CV9 Y8CBGD9YRW7CFBA9YW VOAWY8 0YAGV Y VCONWD vc9buafwcno80yw vyhw V9CYC2EV FCY WEGCFWYCE FCY fY FCg8oyfg YWFET RCFYwe dsgiyafsuyf vIYF GAGVFAfgyasYIXEFQWYFysc vyiS FXtcASGI vNBYTGY7VBGYBVG7YVGBRBVEFGR GRVY GFYVBG8YS O
Источник
Кодирование
Существует стандарт RFC3986, который определяет список разрешённых и запрещённых символов в URL.
Запрещённые символы, например, нелатинские буквы и пробелы, должны быть закодированы – заменены соответствующими кодами UTF-8 с префиксом , например: (исторически сложилось так, что пробел в URL-адресе можно также кодировать символом , но это исключение).
К счастью, объекты делают всё это автоматически. Мы просто указываем параметры в обычном, незакодированном, виде, а затем конвертируем в строку:
Как видно, слово в пути URL-адреса и буква в параметре закодированы.
URL стал длиннее, так как каждая кириллическая буква представляется двумя байтами в кодировке UTF-8.
Раньше, до того как появились объекты , люди использовали для URL-адресов обычные строки.
Сейчас часто удобнее, но строки всё ещё можно использовать. Во многих случаях код с ними короче.
Однако, если мы используем строку, то надо самим позаботиться о кодировании специальных символов.
Для этого есть встроенные функции:
- encodeURI – кодирует URL-адрес целиком.
- decodeURI – декодирует URL-адрес целиком.
- encodeURIComponent – кодирует компонент URL, например, параметр, хеш, имя пути и т.п.
- decodeURIComponent – декодирует компонент URL.
Возникает естественный вопрос: «Какая разница между и ? Когда использовать одну и другую функцию?»
Это легко понять, если мы посмотрим на URL-адрес, разбитый на компоненты на рисунке выше:
Как мы видим, в URL-адресе разрешены символы , , , , .
…С другой стороны, если взглянуть на один компонент, например, URL-параметр, то в нём такие символы должны быть закодированы, чтобы не поломать форматирование.
- кодирует только символы, полностью запрещённые в URL.
- кодирует эти же символы плюс, в дополнение к ним, символы , , , , , , , , , и .
Так что для URL целиком можно использовать :
…А для параметров лучше будет взять :
Сравните с :
Как видим, функция не закодировала символ , который является разрешённым в составе полного URL-адреса.
Но внутри параметра поиска символ должен быть закодирован, в противном случае мы получим , что значит плюс непонятный параметр . Не то, что предполагалось.
Чтобы правильно вставить параметр поиска в строку URL, мы должны использовать для него только . Наиболее безопасно кодировать и имя, и значение, за исключением случаев, когда мы абсолютно уверены в том, что они содержат только разрешённые символы.
Разница в кодировании с
Классы и базируются на последней спецификации URI, описывающей устройство адресов: RFC3986, в то время как функции – на устаревшей версии стандарта RFC2396.
Различий мало, но они есть, например, по-разному кодируются адреса IPv6:
Как мы видим, функция заменила квадратные скобки , сделав адрес некорректным. Причина: URL-адреса IPv6 не существовали в момент создания стандарта RFC2396 (август 1998).
Тем не менее, такие случаи редки. По большей части функции работают хорошо.
DOM (Document Object Model) – объектная модель страницы
Основным инструментом работы и динамических изменений на странице является DOM (Document Object Model) – объектная модель, используемая для XML/HTML-документов. Согласно DOM-модели, документ является иерархией, деревом. Каждый HTML-тег образует узел дерева с типом «элемент». Вложенные в него теги становятся дочерними узлами. Для представления текста создаются узлы с типом «текст».
DOM – это представление страницы в виде дерева объектов, доступное для чтения и изменения через JavaScript.
При чтении неверного HTML браузер автоматически корректирует его для показа и при построении DOM. В частности, всегда будет верхний тег. Даже если в тексте нет – в DOM он будет, браузер создаст его самостоятельно. То же самое касается и тега. Например, если файл состоит из одного слова, то браузер автоматически обернёт его ви .
При генерации DOM браузер самостоятельно обрабатывает ошибки в документе, закрывает теги и делает все, чтобы корректно отобразить документ.
Как это работает?
Компьютеры не понимают JavaScript — браузеры понимают.
Помимо обработки сетевых запросов, прослушивания кликов мыши и интерпретации HTML и CSS для рисования пикселей на экране, в браузер встроен движок JavaScript.
Движок JavaScript — это программа, написанная, скажем, на C ++, которая обрабатывает весь код JavaScript, символ за символом, и «превращает» его в нечто, что ЦП компьютера может понять и выполнить — то есть в машинный код.
Это происходит синхронно, то есть по одной строке за раз и по порядку.
Он делают это потому, что машинный код сложен, и потому что инструкции машинного кода у разных производителей процессоров разные.
Таким образом, движок делают всю эту работу за разработчиков JavaScript, иначе веб-разработка была бы намного сложнее, менее популярной, и у нас не было бы таких вещей, как Medium (оригинальная статья размещена на Medium), где мы могли бы писать статьи, подобные этой (и я бы сейчас спал) ,
Движки JavaScript отличаются по типу выполнения. Он может пройти по каждой строке JavaScript и выполнять их по строчно (см. Интерпретатор), или он может быть умнее и обнаруживать такие вещи, как функции, которые часто вызываются и всегда дают один и тот же результат. Затем он может скомпилировать их в машинный код только один раз, чтобы в следующий раз, когда он встретит его, он выполнял уже скомпилированный код, что намного быстрее (см. Компиляция Just-in-time). Или он может заранее скомпилировать весь код в машинный код (см. Compiler).
Сейчас самый распространенный V8 — это такой движок JavaScript, который Google был создан в 2008 году. В 2009 году у парня по имени Райан Даль появилась идея использовать V8 для создания Node.js, среды выполнения для JavaScript вне браузера, что означало, что этот язык может также использоваться для серверных приложений.
Без состояния
Функции или компоненты без состояния выполняют задачи, словно каждый раз их запускают впервые. Они не ссылаются или не используют в своем исполнении раннее созданные данные. Отсутствие состояния обеспечивает ссылочную прозрачность. Функции зависят только от их аргументов и не имеют доступа, не нуждаются в знании чего-либо вне их области видимости. Чистые функции не имеют состояния. Пример:
var number = 1;function increment(n) { return n + 1;}// глобальная переменная НЕ изменяется: возвращает 2increment(number);
Приложения без состояния все еще управляют состоянием. Однако они возвращают свое текущее состояние без изменения предыдущего состояния. Это принцип функционального программирования.
Чистые функции
Возвращаемое значение чистой функции зависит только от ее входных данных (аргументов) и не влечет никаких побочных эффектов. С одним и тем же входящим аргументом результат всегда будет одинаковый. Пример:
function half(x) { return x / 2;}
Функция принимает число и возвращает значение половины . Если мы передадим этой функции аргумент , она вернет . После вызова чистая функция всегда может быть заменена результатом своей работы. Например, мы могли бы заменить на : где бы эта функция не использовалась в нашем коде, подмена никак не повлияла бы на конечный результат. Это называется ссылочной прозрачностью.
Чистые функции зависят только от того, что им передано. Например, чистая функция не может ссылаться на переменные из области видимости родителя, если они явно не передаются в нее в качестве аргументов. Но и даже тогда функция не может изменять что-либо в родительской области видимости.
var someNum = 8;// это НЕ чистая функцияfunction impureHalf() { return someNum / 2;}
Итого:
- Чистые функции должны принимать аргументы.
- Одни и те же входные данные (аргументы) всегда произведут одинаковые выходные данные (вернут одинаковый результат).
- Чистые функции основываются только на внутреннем состоянии и не изменяют внешнее (примечание: изменяет глобальное состояние).
- Чистые функции не производят побочных эффектов.
- Чистые функции не могут вызывать нечистые функции.
Исправьте ошибку javascript: void (0)
Javascript является важным строительным блоком для многих веб-сайтов, поэтому, если возникнут проблемы с вашим браузером, на настольной ОС или с Javascript, запущенным на веб-сайте, вы не сможете получить доступ к определенному или всем веб-сайтам.
Одна из распространенных ошибок, которая появляется, когда что-то идет не так с Javascript, — это ошибка javascript void 0.
Ошибка, связанная с веб-сайтом
Ошибка javascript void 0 — это ошибка, отображаемая веб-сайтом при загрузке. Это может проявляться по-разному, но это не обязательно означает, что вы увидите ошибку на каждом веб-сайте.
Проверьте, появляется ли у вас ошибка на других сайтах. В противном случае ошибка специфична для веб-сайта. Возможно, вы не так уж много сможете сделать, чтобы исправить это, поскольку оно находится на стороне веб-сайта, но попробуйте другие исправления, перечисленные ниже. Вы можете проверить веб-консоль в своем браузере и сообщить владельцу веб-сайта о проблеме.
Ошибка браузера
Многие современные браузеры теперь основаны на Chromium, но это еще не значит, что они все одинаковы. Некоторые браузеры могут иметь проблемы с определенными веб-сайтами, а другие — нет. Попробуйте использовать другой браузер для доступа к сайту.
Отключить надстройки / расширения
Надстройки и расширения — это здорово, но они могут мешать работе веб-сайтов и содержимого при его загрузке. Если вы внезапно начали получать ошибку javascript void 0 после установки нового расширения / надстройки, отключите ее и повторите попытку.
Попробуйте отключить все расширения / надстройки, а затем зайдите на сайт.
Отключить файловые системы для настольных компьютеров
Блокировщики рекламы и фильтры контента используются не только в браузерах. Их можно установить на настольные компьютеры, как и приложения, похожие на инструменты сетевого мониторинга. Они заранее блокируют рекламу во всех приложениях, но могут вызвать проблемы с Javascript.
Если вы используете фильтр содержимого на рабочем столе, отключите его и попробуйте получить доступ к веб-сайту.
Замыкание (Closure)
Замыкание обеспечивает доступ к области действия внешней функции из внутренней функции.
Но это не что-то новое, я только что описал выше, как это достигается через цепочку областей действия. Что особенного в замыканиях, так это то, что, даже если код внешней функции был выполнен, контекст выполнения извлечен из стека выполнения и уничтожен, внутренняя функция все равно будет иметь ссылку на область действия внешней функции.
function a() { var name = 'John Doe'; function b() { return name; } return b; } var c = a(); c();
Это именно то, что происходит в приведенном выше примере. b() объявлена внутри a(), поэтому она может получить доступ к переменной name из области видимости a() через цепочку областей видимости.
Но она не только имеет к нему доступ, но и создает замыкание, что означает, что она может получить к нему доступ даже после возврата родительской функции a().
Переменная c является просто ссылкой на внутреннюю функцию b(), поэтому последняя строка кода фактически вызывает внутреннюю функцию b().
Вы можете прочитать больше о том, как вы можете использовать замыкания в статье на Medium, написанной Эриком Эллиоттом.
Ещё один способ работы с атрибутами (свойство attributes)
В JavaScript у каждого элемента имеется свойство , с помощью которого можно получить все его атрибуты в виде объекта .
Данный способ может находить применение, когда вам нужно, например перебрать все атрибуты элемента.
Доступ к атрибуту в этой коллекции осуществляется по его индексу или с помощью метода . Отсчёт атрибутов в этой коллекции ведётся с 0.
Например, выведем в консоль все атрибуты некоторого элемента:
<p id="message" class="text" style="text-align: center;">I LOVE JAVASCRIPT</p> <script> // получим элемент по его идентификатору message var message = document.querySelector('#message'); // получим его атрибуты var attrs = message.attributes; // переберём все атрибуты с помощью цикла (attrs.length – количество атрибутов) for (var i = 0, length = attrs.length; i < length; i++) { // attrs или attrs.item(i) – обращение к атрибуту в коллекции по его порядковому номеру // attrs.name – имя атрибута // attrs.value – значение атрибута (с помощью него можно также изменить значение атрибута) console.log(attrs.name + ' = ' + attrs.value); // или с помощью метода item console.log(attrs.item(i).name + ' = ' + attrs.item(i).value); // пример как можно изменить значение через свойство value // if (attrs.name === "class") { // attr.value = "info"; // } } // в результате выполнения: // id = message // class = text // style = text-align: center; </script>
Кроме этого, работать с этой коллекцией можно также посредством следующих методов:
- – получает значение указанного атрибута (если указанный атрибут отсутствует у элемента, то в качестве результата получим ).
- – добавляет новый атрибут к элементу или обновляет значение у существующего. Для создания атрибута необходимо использовать метод , которому в качестве параметра необходимо передать имя атрибута. После этого созданному атрибуту необходимо присвоить значение с помощью свойства .
- – удаляет указанный атрибут у элемента (в качестве результата возвращает удалённый атрибут).
Пример, работы с атрибутами через методы getNamedItem, setNamedItem и removeNamedItem:
<p id="message" class="text" style="text-align: center;">I LOVE JAVASCRIPT</p> <script> // получим элемент по его идентификатору message var message = document.querySelector('#message'); // получим его аттрибуты var attrs = message.attributes; // Задача №1. Получим значение атрибута id console.log(attrs.getNamedItem('id')); // Задача №2. Установим атрибут (если он есть, то изменим его значение, в противном случае добавим новый) // создаём атрибут style и сохраняем его в переменную attrStyle var attrStyle = document.createAttribute('style'); // присваиваем значение атрибуту с помощью свойства value attrStyle.value = 'text-align: left;'; // устанавливаем атрибут элементу attrs.setNamedItem(attrStyle); // Задача №3. удалить атрибут class у элемента attrs.removeNamedItem("class"); </script>
Шаг 3 — Обработка запросов POST
По умолчанию Fetch использует запросы GET, но вы также можете использовать и все другие типы запросов, изменять заголовки и отправлять данные. Для этого нужно задать объект и передать его как второй аргумент функции fetch.
Прежде чем создать запрос POST, создайте данные, которые вы хотите отправить в API. Это будет объект с именем с ключом и значением (или вашим именем):
Обязательно добавьте постоянную переменную, хранящую ссылку на Random User API.
Поскольку это запрос POST, ее нужно будет указать явно. Создайте объект с именем :
Этот объект должен содержать три ключа: , и . Ключ должен иметь значение . Для следует задать значение только что созданного объекта . Для следует задать значение :
Интерфейс является свойством Fetch API, который позволяет выполнять различные действия с заголовками запросов и ответов HTTP. Если вы захотите узнать об этом больше, вы можете найти более подробную информацию в статье под названием Определение маршрутов и методов запросов HTTP в Express.
С этим кодом можно составлять запросы POST, используя Fetch API. Мы добавим и как аргументы запроса POST:
Функция будет включать код, обрабатывающий ответ, получаемый от сервера Random User API:
Есть и другая опция, позволяющая создать объект и использовать функцию . Вместо того, чтобы создавать такой объект как , вы можете использовать конструктор запросов для создания объекта запроса. Для этого нужно создать переменную с именем :
Для переменной следует задать значение . Конструкт принимает два аргумента: URL API () и объект. В объекте также должны содержаться ключи , и , как и в :
Теперь можно использовать как единственный аргумент для , поскольку он также включает URL-адрес API:
В целом код будет выглядеть следующим образом:
Теперь вы знаете два метода создания и выполнения запросов POST с помощью Fetch API.
Глобальный контекст выполнения
Но не весь код JavaScript находится внутри функций.
Также код может быть вне любой функции на глобальном уровне, поэтому одна из самых первых вещей, которую делает движок JavaScript, — это создание глобального контекста выполнения (global execution context).
Это похоже на контекст выполнения функции и служит той же цели но на глобальном уровне, и имеет некоторые особенности.
Например, существует только один глобальный контекст выполнения, созданный в начале выполнения, внутри которого выполняется весь код JavaScript.
Глобальный контекст выполнения создает две вещи, которые специфичны для него, даже если нет кода для выполнения:
- Объект window, когда JavaScript запускается внутри браузера. Когда он запускается вне его, как в случае с Node.js, он будет чем-то вроде global. Для простоты я буду использовать window в этой статье.
- Специальную переменная которая называется this.
В глобальном контексте выполнения, и только там, this фактически равняется объекту window. Это в основном ссылка на window.
this === window // logs true
Другое тонкое различие между глобальным контекстом выполнения и контекстом выполнения функции заключается в том, что любые переменные или функции, объявленные на глобальном уровне (вне какой-либо функции), автоматически присоединяются в качестве свойств к объекту window и неявно к специальной переменной this.
Хотя функции также имеют специальную переменную this, этого не происходит в контексте выполнения функции.
Таким образом, если у нас есть глобальная переменная foo, объявленная на глобальном уровне, следующие три утверждения будут фактически указывать на нее. То же самое относится и к функциям.
foo; // 'bar' window.foo; // 'bar' this.foo; // 'bar' (window.foo === foo && this.foo === foo && window.foo === this.foo) // true
Все встроенные в JavaScript переменные и функции присоединяются к глобальному объекту window: setTimeout(), localStorage, scrollTo(), Math, fetch() и т. д. Именно поэтому они доступны в любом месте кода.
На практике: функциональное программирование на JavaScript
Функциональное программирование охватывает приведенные выше концепции следующими способами:
- Основные функции реализованы с использованием чистых функций без побочных эффектов.
- Данные неизменяемы.
- Функциональные программы не имеют состояния.
- Императивный код контейнера управляет побочными эффектами и выполняет декларативный, чистый код ядра.
Примечание: если бы мы попытались написать JavaScript веб-приложение, состоящее только из чистых функций без побочных эффектов, оно не смогло бы взаимодействовать с окружением и поэтому не было бы особенно полезным.
Давайте рассмотрим пример. Скажем, у нас есть текст, и мы хотим посчитать количество слов в нем. Мы также хотим найти ключевые слова длиной более пяти символов. Используя функциональное программирование, наш результирующий код может выглядеть примерно так:
Код доступен для запуска здесь — JSFiddle: Functional Programming with JavaScript. Он разбит на понятные, декларативные функции с четким назначением. Если мы пройдем по нему и прочитаем комментарии, то никаких дополнительных разъяснений кода не потребуется. Каждая функция ядра — модульная и зависит только от ее входных данных (чистая). Последняя функция обрабатывает ядро для генерации общих выходных данных. Функция — нечистый контейнер, выполняющий ядро и управляющий побочными эффектами. Мы использовали , принимающую другие функции в качестве аргументов для поддержания функционального стиля.
Разница между Python и JavaScript:
Оба языка программирования открывают разработчикам светлое будущее. В Интернете JavaScript доминирует над Python, но, когда дело доходит до науки о данных и искусственного интеллекта, Python выходит на первое место. Прежде чем сравнивать два популярных языка программирования (JavaScript и Python), давайте кратко познакомимся с ними обоими.
Python:
Гвидо ван Россум впервые представил Python в 1991 году. Язык является одним из самых популярных языков. С самого начала это язык высокого уровня, который следует концепции ООП. Поскольку это интерпретируемый язык, Python построчно читает исходный код и выполняет его так же. В текущем сценарии Python является единственным упорядоченным и популярным языком после Java. Универсальная природа Python делает его более мощным, чем любой другой язык программирования и сценариев. Он используется для многих целей, таких как анализ данных, научный анализ, машинное обучение, разработка приложений, а также разработка 2d и 3d игр.
Преимущества Python:
- Его быстро и легко изучить по сравнению с другими объектно-ориентированными языками.
- Он поддерживает несколько платформ.
- Синтаксис языка хорошо организован и легко читается.
- Это динамический язык, поэтому вам не нужно определять тип данных переменной.
- У него большое сообщество.
- Поддерживает концепции ООП.
- Имеет большое количество библиотек.
Недостатки Python:
- Python не обладает хорошими многоядерными и многопроцессорными возможностями.
- Существует ограничение на доступ к базе данных.
- Он медленный по сравнению с другими языками, такими как Java и JavaScript.
JavaScript:
JavaScript — это язык программирования высокого уровня, который используется как язык сценариев как на стороне клиента, так и на стороне сервера. Для запуска файлов ему не нужен компилятор, интерпретатор или ассемблер. Он работает внутри веб-браузера, но может работать вне браузера с помощью NodeJS.
Часто люди путают, что JavaScript связан с Java из-за сходства в названиях. Однако JavaScript полностью отличается от Java. В то время как JS — это язык веб-сценариев, Java — это полноценный язык программирования.
JavaScript был разработан Бренданом Эйхом еще в 1994 году, когда веб-страницы работали только на HTML и CSS. JavaScript популярен среди всех языков сценариев. Основная функция JavaScript — создание динамических веб-страниц, которые осуществляют взаимодействие между пользователем и сервером.
Крупные гиганты, такие как Facebook и Twitter, используют JavaScript для разработки динамических интерфейсов. JavaScript не ограничивается только веб-страницами, но также используется для создания 3D-игр, управления базами данных и многого другого.
Преимущества JavaScript:
- Он может работать в любом браузере.
- Скорость JavaScript очень высокая. Поскольку он может работать напрямую на клиент-сервере, это делает его очень быстрым.
- Учиться очень легко.
- JavaScript повсюду в сети. Так что изучение JavaScript — хороший выбор для старта карьеры.
- У него огромное сообщество по всему миру.
Недостатки JavaScript:
- Код JavaScript небезопасен. Также код всегда виден.
- JavaScript DOM (объектная модель документа) работает не так быстро.
- Поиск ошибок в JavaScript очень сложен.
- Даже одна ошибка может остановить работу всего интерфейса сайта.
- В нем нет концепции чтения из файла или записи в файл.
Подводя итог: функциональное программирование
Неизменяемость данных и отсутствие состояния гарантируют, что состояние программы не изменяется. Вместо этого возвращаются новые значения. Чистые функции используются для функциональности ядра. Чтобы запустить программу и обработать необходимые побочные эффекты, нечистые функции могут императивно вызывать чистые.
Дополнительную информацию о функциональном программировании можно найти на следующих ресурсах:
- Введение в Immutable.js и концепции функционального программирования
- Функциональное программирование для отставших
- Функциональное программирование на JavaScript
- Не бойтесь функционального программирования
- Lodash — Руководство по функциональному программированию
- В чем разница между функциональными и императивными языками программирования?
- Eloquent JavaScript — Функциональное программирование
- Функциональное программирование на примере
- Функциональное программирование в JavaScript — серия видео
- Как выполнять побочные эффекты при чисто функциональном программировании
- Предотвращение побочных эффектов в JavaScript
Observables
Observables похожи на массивы, за исключением того, что элементы не хранятся в памяти, а поступают асинхронно с течением времени (потоки). Мы можем подписаться на observables и реагировать на их события. JavaScript оbservables — это реализация шаблона observer. Реактивные расширения (обычно называемые с префиксом Rx) предоставляют observables для JS через RxJS.
Для демонстрации концепции observables давайте рассмотрим простой пример: изменение размера окна браузера. В этом контексте observables максимально понятны. Изменение размера окна браузера испускает поток событий в течение определенного периода времени (пока окно принимает нужный размер). Мы можем создать observable и подписаться на него, чтобы реагировать на поток событий изменения размера:
Пример кода выше демонстрирует, что, по мере изменения размера окна, мы можем ограничивать observable поток и подписаться на его изменения, чтобы реагировать на новые значения в коллекции. Это пример горячего observable.