CORE Flashcards

1
Q

Какво е JavaScript?

A

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

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

Какво е Node.js?

A

отворена платформа, крос-платформено среда за изпълнение на JavaScript на сървърната страна.

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

Кои са ппарадигмите в JavaScript?

A
  1. Императивно - ясно определени стъпки;
  2. Функционално - чрез функции;
    3.ООП - чрез система за наследяване на обекти и класове;
    4.Асинхронно - пишем код, който може да извършва много действия едновременно без да блокираме предходни операции;
    5.Модулно - разделяме кода на малки и преизползваеми модули;
    6.Събития - създава се интерактивен потребителски интерфейс, като се следи за случващи се събити на уеб страницата (клик на мишка, клавиш);
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Защо да използваме ‘use strict’?

A

Пише се най-горе във файла, открива скрити грешки (silent), задължително спазва добрите практики за програмиране, по-лесно отстранява грешки, подобрява производителноста.

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

Каква е разликата между ‘var’, ‘let’, ‘const’?

A

Кл. думи за деклариране на променливи, различават се по скоупа им.
‘const’ - константите не могат да променят стойноста си; блок скоуп;
‘let’ - могат да променят стойноста си; също са с блок скоуп;
‘var’ - ДЕКЛАРИРА променлива; глобален или функционален скоуп; !!!могат да се достъпват преди инициализацията им, това води до грешки!!!

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

Какви типове данни познавате в JavaScript?

A

Примитивни и референтни.
Примитивни: number, string, boolean, null, undefined, symbol

Референтни: object, array, function. допълнение - Date, regEx, Map, Set

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

Каква е разликата между ‘==’ и ‘===’?

A

Оператори за сравнение.
‘==’ - преди да направи сравнението, JS ще обърне двете стойности в един тип;

’===’ - сравнява стойностите без да променя техния тип.

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

Какво е type coercion?

A

Типовото преобразуване е автоматичното преобразуване на стойности от един тип в друг.

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

Какво са Higher-Order Functions и Callback functions?

A

HOF - приемат други функции като аргумент и връщат функция като резултат.

Callback - функция, която е подадена като аргумент на друга функция и се извиква по-късно, когато основната функция е завършила изпълнението си.

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

Какви типове функции познавате и каква е разликата между тях?

A

Function Declaration - деклариране на функция с име; function name(){}
Function Expression - закачаме функция към промелива, хойства се само променлива;
Arrow Function - съкращение на function expression, не поддържа .this;

HOF - map, filter, reduce;
разлика: работят с други функции подадени като аргумент и връщат функции;

Pure Functions - винаги връщат един и същ резултат;
разлика: нямат странични ефекти;
Странични ефекти - промени в резултата, console.log, изпращане на заявки;

IIFE (Immediately Invoked Function Expressions) - анонимна функция, която се извиква незабавно след дефинирането й, създават закрити области с обхват;

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

Какво е Hoisting?

A

Променливи и функции се издигат в техния скоуп по време на компилация на кода, преди той да бъде изпълнен.

Декларациите се издигат с цялото си тяло;
Expressions/ Arrow - функциите не се издигат, а само променливите, към които са закачени;

Всички променливи се издигат, но не могат да се използват преди инициализация;

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

Какво е Scope?

A

Област на виждане, определя видимостта и достъпността на променливи и функции в програмата;

Глобален - ако се дефинира извън функции и блок скоупове, достъпват се отвсякъде в програмата;

Локален - достъпват се само в определени части на програмата, дефинират се в блокове като ‘if’, ‘for’, ‘while’;

Функционален - във функциите и само в тях;

Блоков - чрез ‘let’, ‘const’ или { }, видими само в тях;

Лексически - определя се по време на парсинг процеса, а не по време на изпълнение, видимоста на променливите се определя от позицията им в кода;

Lexing-time - парсинг, компилация на кода, което се иползва от интерпретатора.

Динамичен - базира се на текущото състояние на стека по време на изпълнение;

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

Какво е Closure?

A

Closure е способността на функцията да запази достъп до своя лексически скоуп след като е завършила изпълнението си.

Виктор Вълчев: Функцията събира всичко нужно за нейното изпълнение и го държи вътре в себе си.

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

Какво е Exception?

A

Събитие, което настъпва по време на изпълнение на програма и прекъсва нормалния ход на действия. Предизвиква грешки.

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

Защо да използваме try{} catch{} блок?

A

Служи за обработка на Exceptions, управлява грешките по време на изпълнеине. В try блока вкарваме всички инструкции, които искаме да изпълним и биха хвърлили грешка; В catch блока хващаме тези грешки появили се в try блока.

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

Защо да използваме breakpoints?

A

Това са маркери, които дебъгера ни ги предоставя, чрез които да посочваме точно определно място в нашия код, където преограмата трябва да бъде спряна. Анализират се стойности по време на дебъгване.

17
Q

Какво са template strings?

A

Позволяват създаването на string-ове с вградени изрази. Използва се апостроф ( `` ) и добавяме допълнителните изрази чрез ${}.

18
Q

Какво са обектите? Защо се използват?

A

Референтен тип данни, които съдържат ключ-стойност двойнки като свойства.

Използват се за:
-организиране на данни като ключ-стойност;
-моделиране на реални концепции;
-групиране на функционалности и данни;
-достъп и манипулация на данни;

19
Q

Какво е деструктурирането?

A

Метод за извиличане на стойности от масив или свойства от обекти и тяхното присвояване на променливи по по-кратък начин.

const nums = [1, 2, 3, 4]
const [first, second] = nums;

console.log(first); // 1
console.log(second); // 2

const person = { name: “John”, age: 30, city: “New York” };
const { name, age } = person;

console.log(name); // “John”
console.log(age); // 30

20
Q

Как се копират данни?

A

Reference Copy - две променливи споделят същата референция (адрес в паметта). Тук промените в едната референция ще се отразят и в другата;

Shallow Copy - копираме примитивни типове данни по стойност, а обекти и функции - по референции. Ако копираме обекти, ще имаме референция, която ще сочи към оригиналния обект, няма да го копира. Промените се отразяват в копието и в оригинала;

Deep Copy - всички данни се копират и стават независими от оригинала;
const deepCopy = JSON.parse(JSON.stringify(original));

21
Q

Какво са property descriptors?

A

Обекти, които предоставят допълнителна информация за свойството на обект. Описват атрибутите и поведението на свойството, като например дали могат да бъдат променяни, дали се обхожда и дали може да се конфигурира.

22
Q

Какво са computed properties?

A

Функционалност, която позволява използването на израз като име на свойство при създаване или достъпване на обект.

const propertyName = “color”;
const myObject = {
[propertyName]: “red”, // Създава свойство с име “color” и стойност “red”
};

console.log(myObject.color); // “red”

23
Q

Какво са циклите и какви типове има?

A

Позволява изпълнение на един блок код няколко пъти.

for - определен борй пъти;
while - докато условието е true;
do..while - кодът ще се изпълни веднъж преди проверките;
for..in - обхожда свойствата на обект;
for..of - обхожда стойности на масив;

24
Q

Какво са масивите и защо да ги ползваме?

A

Линейна структура с множество стойности, индексира елементите, могат да се достъпват и манипулират чрез тях.

Предимства: елементите се съхраняват в една структура от данни; лесно се манипулират чрез цикли; лесно сортиране и филтриране;

25
Q

Какво са NPM пакетите и какви са техните предимства?

Какво е package.json файлът?

Какво са NPM Scripts?

Какво са ES Modules?

A

Node Package Manager инсталира и управлява библиотеки и зависимости за Node.js проекти.
Предимства: лесно инсталиране, управление на версии, споделяне на код, голяма екосистема.

Package.json - конфиг файл, който съдържа информация за проекта и неговите зависимости.

NPM Scripts - команди дефинирани в package.json файла, позволяват тестове и др.

ES Modules - стандарт за модулна система.

26
Q

Какво е Git? Зашо да го използваме?

Какво е GitLab?

Защо GitLab е по-различен от Git?

Какви глобални конфигурации трябва да се сетнат, за да използваме Git и каква им е ролята?

Какво е commit, каква информация съдържа?

A

Git - система за управления на версии, проследява промените в кода и работа между разработчиците.
Предимства: проследяване и история на промените;
лесна работа в екип;
съхранение на различни версии;
лесно възстановяване на стари версии;

GitLab - платформа, разлиакта, е че Git е самата система за управление, а GitLab е доставчика й.

За да се използва Git, ни трябват потребителско име и имейл.

Commit - промяна в кода подадена от разработчик. Съдържа: хеш код;
име и имейл на автора;
дата;
съобщение за комита;

27
Q

Какво е Module и Revealing Module Pattern?

A

Модулът енкапсулира кода и го скрива от глобалния скоуп.

Revealing Module Pattern - шаблон за модулан система, return връща всичко, което искаме да е публично.

28
Q

Защо да използваме методите на масивите (map, filter, reduce, forEach), вместо цикли?
Как работят те?

A

По-чист и декларативен код, по-малко грешки, повторно използване на код, оптимизирани за бърза работа с масиви.

Map - взема всеки елемент от масива и го променя, като прилага предварително зададената функция върху него.
const nums= [1, 2, 3];
const numsSquared= nums.map(num=> num* 2);

Filter - взема всеки елемент от масива и го оставя или го премахва, зависи от предварително зададената функция.
const nums = [1, 2, 3, 4, 5];
const primeNums = nums.filter(num => num % 2 === 0);

Reduce - взема всеки елемент от масива и го комбинира с предишен елемент, използвайки зададена функция за агрегация.
const nums = [1, 2, 3, 4, 5];
const sum = nums.reduce((acc, curr) => acc + curr, 0);

ForEach - взема всеки елемент от масива и изпилнява предварително зададената функция от нас. Не създава нов масив, а променя този върху, който работи.

const nums = [1, 2, 3];
nums.forEach(num => console.log(num));