Core JS Flashcards

1
Q

Як працює двигун v8?

A

Разработан компанией google, написан на c++. Используется в Chrome и Node.js. Нода состоит из v8 и libuv, который обеспечивает i/o (FS, Child processes, threading).

V8 переводит код JavaScript в более эффективный машинный код во время исполнения с помощью Just-In-Time компилятора, вместо использования интерпретатора.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое event loop?

A

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

Коллбеки попадают в message queue, результат промисов в job queue. У job queue приоритет выше и результат промиса покажется раньше.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Как JS работает с памятью?

A

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

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

Для оптимизации, в современных интерпретаторах используется подход, в котором, в памяти есть 2 области, для старых и новых объектов. “Новая” область очищается чаще. “Старая” реже.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Антипаттерны работы с памятью

A
  • Хранение объектов в глобальной области видимости, или в родительских, где это не нужно. В таком случае, она не может очиститься.
  • Считывание файла в память, вместо того, чтобы использовать стримы
  • listeners которые слишком часто вызываются, могут засорять память
  • Функция render вызывается часто, и код в ней может заполнять память.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое Callback?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое Promise?

A

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

Их можно чейнить и тогда новый then вернет то, что вернул предыдущий then.

Важно понимать, что вызов функции уже запускает промис, then/catch/await только позволяют нам получить результат.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Promise.all vs Promise.allSettled

A

Оба запускают промисы параллельно, но .all выпадет в catch если хотябы 1 промис зафейлится. allSettled получит реджекты в then, где в поле status мы сможем это проверить.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Отличие process.nextTick(), setImmediate(), setTimeout(fn, 0)

A

nextTick не попадает в официально в event loop. Просто запускается сразу после текущего тика. Для них есть специальная очередь.

setImmediate попадает в евент луп в check queue. просто выполняется сразу.

setTimeout(fn, 0) попадает в timer queue, у которой приоритет выше, чем у check queue. Отработает быстрее setImmediate. Не гарантирует точное время выполнения, так как может задержаться в очереди.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Что такое замыкания?

A

У функции есть своя область видимости (scope), куда записываются переменные, другие функции. Он скрыт от прямого доступа, но из функции можно получить доступ к родительским областям видимости. И даже когда родительская функция уже была вызвана, дочерняя все еще имеет доступ к её переменным.

При запуске функции создается лексическое окружение (LexicalEnvironment) с аргументами, переменными и функциями объявлеными внутри неё. Также у неё есть доступ к объекту [[Scope]] который ведет на родителькую область видимости.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Область видимости переменной

A

У let, const область видимости блок, тоесть if, for, case с {} и т.д. У var область видимости функция.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Що таке hoisting?

A

Оголошення функції чи змінної переміщуються інтерпретатором на початок області видимості. let, const — блок, а var — функція.
Присвоювання спрацює тільки там, де воно було описане.
Якщо описати функцію як function name() вона підніметься на початок області видимості, що дозволяє викликати її до місця оголошення.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Які є типи в JS?

A

Примітивні типи: number (включає NaN), bigint, boolean, string, null, undefined, symbol.

Також є object, який є структурою даних.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Що таке Symbol?

A

Symbol — це унікальне, незмінне значення, яке використовується як ключ об’єкта, не беручи участі в ітераціях. За його допомогою можна задати спеціальні методи для об’єктів, такі як:

Symbol.iterator — ітерація через for…of;

Symbol.toPrimitive — перетворення до примітиву;

Symbol.toStringTag — результат для toString;

Symbol.asyncIterator — асинхронна ітерація;

Symbol.hasInstance — кастомізований instanceof.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Чем отличается == от ===?

A

Перший оператор виконує порівняння з приведенням типів, тоді як другий виконує строге порівняння без приведення типів.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

WeakMap

A

WeakMap як ключ може мати лише об’єкти. Він не підтримує ітерацію. Якщо об’єкт, який використовується як ключ, перестає існувати деінде в коді, його більше не буде зберігатися в WeakMap. Це дозволяє йому швидше звільняти пам’ять, оскільки WeakMap не перешкоджає видаленню об’єктів зі сміттєзбирачем.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Map

A

Map зберігає дані у форматі ключ-значення так само, як і Object, але в об’єкті ключем можуть бути лише примітиви, тоді як у Map ключами можуть бути навіть об’єкти. Object можна перетворити на JSON, а Map — ні. В Object у функції можна використовувати this, а в Map — ні.
Гарантує порядок ключів.

17
Q

Генератори

A

Це особливий вид функцій, які можуть повертати проміжний результат. За допомогою методу next() ми можемо переходити до наступного yield. Коли повертається done: true, генератор завершив своє виконання. Він ітерується за допомогою for…of.

18
Q

ESM vs CommonJS

A

2 різні системи модулів.
ESM - введений в ES6, підтримує import export синтаксис, await на верхньому рівні без функції. Модулі аналізуються статично, що спробує tree-shaking.

19
Q

Arrow functions VS regular

A

Немає контексту this, буде використаний this парент функції.
Не може бути конструктором.
Не має доступу до arguments.

20
Q

call, apply та bind

A

fn.call(thisArg, arg1, arg2, …) - викликає функцію з переданим контекстом та аргументами через кому одразу.
fn.apply(thisArg, [arg1, arg2, …]) - викликає одразу, але аргументи у вигляді масиву.
fn.bind(thisArg, arg1, arg2, …) - створить нову функцію з контекстом та привʼязаними аргументами. Можна вказувати не всі аргументи.