Javascript

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

Node.js

Node.js — это платформа, построенная на основе JavaScript Engine Google Chrome (движок V8), позволяющая легко создавать быстрые и масштабируемые сетевые приложения. Node.js использует модель неблокирующего ввода-вывода, управляемую событиями, что делает его легким и эффективным, идеально подходящим для приложений реального времени, интенсивно использующих данные, которые работают на распределенных устройствах.

1. В чем разница между setTimeout, setImmediate и process.nextTick?

Внешне SetTimeout, setImmediate и process.nextTick — это функции, которые делают одно и то же. Они выполняют обратный вызов после текущего цикла событий, но прежде всего.

setTimeout: устанавливает таймер, который выполняет функцию или указанный фрагмент кода по истечении времени таймера.

setImmediate: он используется для прерывания длительных операций и запуска функции обратного вызова сразу после того, как браузер завершит другие операции, такие как события и обновления отображения.

process.nextTick:Функция, переданная в process.nextTick(), будет выполняться на текущей итерации цикла обработки событий после завершения текущей операции. Это означает, что он всегда будет выполняться до setTimeout и setImmediate.

Например,

Вывод
Я текущий цикл событий
Я nextTick
Я setTimeout
Я setImmediate

В приведенном выше выводе первым является «Я являюсь текущим циклом событий», а вторым выполненным был process.nextTick, который помещает свой обратный вызов в начало очереди событий. Он будет выполняться после текущего кода, но перед событиями ввода-вывода или таймерами.

Далее идет «тайм-аут». Поскольку мы передали setTimeout тайм-аут, равный 0, дополнительная принудительная задержка перед его выполнением отсутствует, и он помещается в очередь таймера во время следующего цикла.

В итоге у нас есть setImmediate, который будет медленнее, чем setTimeout 0.

Обычно цикл обработки событий выглядит так:
Таймеры -> IO -> опрос -> проверка -> закрытие -> таймеры -> … События ввода-вывода
Опрос: получение новых событий ввода-вывода
Проверка: здесь выполняются обратные вызовы из setImmediate
Закрытие: обработка закрытых соединений, таких как сокеты

2. Объяснить функцию закрытия?

Способность Closures состоит в том, чтобы запоминать переменные и функции, объявленные во внешней области видимости.

Например ,

Функция showBiodata() выполняется и возвращает функцию, которую мы присвоили переменной:

var initClosure = showBiodata();

Возвращенная функция затем выполняется, когда мы вызываем initClosure:

инициализация закрытия();

Вывод

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

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

3. Что такое временная мертвая зона?

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

Например:

В приведенном выше коде мы пытаемся получить доступ к переменным, которые еще не были объявлены.

4. В чем разница между параметром Rest и оператором Spread?

Параметр Rest:Параметр Rest позволяет функции принимать неопределенное количество аргументов в виде массива.

Например,

Оператор Spread:оператор Spread позволяет расширять итерируемые объекты (массивы/объекты/строки) до отдельных аргументов/элементов. Также мы можем использовать это для объединения двух массивов

Например,

5. В чем разница между Promise и Observable?

6. Что выводит приведенная ниже программа?

Вывод:
3
3
3

Переменная, объявленная внутри цикла for с ключевым словом var, не имеет области действия блока. Таким образом, переменная i сначала увеличивается, а затем проверяется.

Что произойдет, если мы заменим var на let (область действия блока), как показано ниже.

Вывод:
0
1
2

7. Угадайте вывод приведенных ниже кодов?

Код 1:

Вывод:
false
false
false
true

Код 2:

Вывод:
Uncaught TypeError: Не удается прочитать свойства неопределенного

Программа никогда не будет выполняться после оператора return. Чтобы исправить, следуйте приведенному ниже методу.

Вывод:
Рейн Даль

8. Что выводит приведенная ниже программа?

Вывод:
Рейн Даль
Рейн

Здесь showName является замыканием и получает переменную имени из внешней области видимости. У условного оператора есть другое имя локальной переменной, которое перезаписывает переменную внешнего имени. Итак, первый console.log отображает значение «Rayn Dahl». Где второй console.log регистрирует «Rayn», захватывая переменную имени из externalscope.

9. Что выводит приведенный ниже код?

Вывод:
2
5
1
2
1

sum() — Здесь аргументы не передаются, поэтому берется значение по умолчанию 1 и возвращается как 1+1=2.

sum(2,3) — здесь у нас есть два аргумента 2, 3 и возвращается как 2+3=5

sum(‘’) — Здесь первый аргумент является строкой, а второй аргумент не определен, поэтому принимается значение по умолчанию 1. «» + 1 = 1 (конкатенация строк)

sum(null, 2) — первый аргумент равен нулю, а второй аргумент равен 2. null + 2 = 2

sum(undefined, null) — Здесь первый аргумент не определен, поэтому он принимает значение по умолчанию 1, а второй аргумент равен null. 1 + ноль = 1

10. Каковы результаты следующих программ?

Код 1:

Вывод:
Привет, мир
Привет, Javascript

0 — ложь, !0 — истина, поэтому в журнал записывается «Hello world».

новый номер возвращает объект, объекты являются правдивыми, поэтому приведенный выше блок кода переходит к условию else, т. е. «Hello Javascript».

Код 2:

Результат:
Райн Даль
45
ИТ
разработчик

Свойство объекта соответствует приведенным ниже правилам.
Свойства объекта могут быть извлечены и присвоены переменной с другим именем.
Свойству присвоено значение по умолчанию, когда полученное значение не определено.