JavaScript (JS) — это легкий интерпретируемый язык сценариев с первоклассными функциями. Хотя он наиболее известен как язык сценариев для веб-страниц, во многих небраузерных средах. В JavaScript наиболее важным компонентом является движок JavaScript. Этот js-движок используется для компиляции программы и ее воплощения в жизнь. Эти двигатели работают в 2 этапа:

  1. Этап создания.
  2. Фаза исполнения.

Этап создания:

В качестве первого шага этапа создания он создает объект активации (что означает сканирование всего кода и перечисление всех переменных и объявлений). На втором этапе он создает цепочку областей видимости (что означает, что он перечисляет все переменные). в текущей функции) и на последнем шаге определяет этот объект.

Этап выполнения:

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

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

Стек вызовов

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

Если функция вызывает другую функцию, механизм JavaScript создает новый контекст выполнения функции для вызываемой функции и помещает ее на вершину стека вызовов. Когда текущая функция завершается, движок извлекает ее из стека вызовов и возобновляет выполнение с того места, где оно было остановлено.

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

Переменные и значения хранятся в куче. Кучи — это место, где JavaScript хранит переменные и их значения. Стек — это место, где JavaScript создает фреймы в соответствии с вызовом вашего метода.

Подъем

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

После запуска скрипт показывает переменную как неопределенную, потому что переменная, потому что на этапе создания он переместил все глобально объявленные переменные в начало, но он перемещает только объявление переменной, а не инициализацию. Это означает, что мы можем использовать переменные JavaScript до их объявления. Чтобы понять это, давайте воспользуемся приведенным ниже примером. Здесь мы используем переменную a(var a) перед ее объявлением, как показано на рисунке blow.

В консоли будет напечатано undefined, потому что на этапе создания будет перемещено только объявление переменной, а не инициализация. Большинство разработчиков думают, что хостинг работает только с var, но переменные, созданные с использованием ключевого слова let, также могут быть подняты. Когда мы используем «var», создается область действия функции, но когда мы используем «let», создается область сценария. Движок JavaScript знает о наличии переменной, но не может использовать ее до объявления. Если мы используем переменную let перед ее объявлением, это приведет к ошибке ссылки, как показано ниже.

Хостинг работает для функции, но не для справки. Хостинг поддерживает, когда это «var» и функция, но в «let», хостинг работает, но не может использовать это.

Реактивное программирование

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

Чтобы реализовать реактивное программирование в реальности, нам нужны 3 вещи:

  1. Потоки данных
  2. Функциональное программирование
  3. Асинхронный наблюдатель

Использование реактивного программирования

  • Может использоваться везде, где требуется время для обработки запроса. Например, отправка запроса на серверную часть HTTP и серверную часть требует времени для обработки, и разработчикам не нужно ждать этого времени. Итак, этот HTTP-бэкэнд может использовать реактивное программирование.
  • Может использоваться для регистрации уведомлений. Например, наблюдатель может ждать уведомления, а когда уведомление приходит, разработчики могут его логировать.

Императивное программирование

  • Императивное программирование — это парадигма разработки программного обеспечения, в которой функции неявно закодированы на каждом этапе, необходимом для решения проблемы.
  • Сосредоточьтесь на том, как работает программа, и у нее простая кривая обучения.
  • Доступны функции, условия, циклы и концепции ООП.
  • Операторы могут изменить состояние программы. Например: Java, C

Функциональное программирование

  • функциональное программирование — это набор подходов к программированию, обычно описываемый как парадигма программирования.
  • Сосредотачивается на том, что является объектом (что решать).
  • Может быть длинная кривая миграции и в идеале быть без гражданства.
  • Используйте функции для создания выражений, а не операторов
  • Мы используем цепочки функций. Например: Скала

Почти все языки не поддерживают реактивное программирование. Поэтому нам нужна внешняя поддержка, чтобы преобразовать эти языки в реактивное программирование. Reactivex.io — это официальная платформа, управляющая реактивным программированием, и у нее есть отдельные библиотеки для каждого языка, такие как RxJava (для Java), RxJS (для JavaScript), Rx.net (для dot net), RxScala (для Scala), и NgRx (для angular) для нескольких языков.

Промисы против наблюдаемых

Обещание

Обещание — это объект, который представляет возможный успех или неудачу асинхронной операции. А также его возвращаемое значение. Обещание JavaScript — это обещанная операция, которая имеет различные состояния, такие как «Создано», «Ожидание», «Успех» и «Ошибка». Обещание JavaScript — это основа асинхронного программирования в JavaScript. Это позволяет нам ставить в очередь асинхронные задачи как промис и обрабатывать другие вещи, пока мы ждем завершения промиса.

Наблюдаемые

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

~конец~