CORE Flashcards
Какво е JavaScript?
динамичен, синхронен интерпретиран програмен език.
Обичайно се използва за клиентска скриптова разработка в уеб програмирането.
Какво е Node.js?
отворена платформа, крос-платформено среда за изпълнение на JavaScript на сървърната страна.
Кои са ппарадигмите в JavaScript?
- Императивно - ясно определени стъпки;
- Функционално - чрез функции;
3.ООП - чрез система за наследяване на обекти и класове;
4.Асинхронно - пишем код, който може да извършва много действия едновременно без да блокираме предходни операции;
5.Модулно - разделяме кода на малки и преизползваеми модули;
6.Събития - създава се интерактивен потребителски интерфейс, като се следи за случващи се събити на уеб страницата (клик на мишка, клавиш);
Защо да използваме ‘use strict’?
Пише се най-горе във файла, открива скрити грешки (silent), задължително спазва добрите практики за програмиране, по-лесно отстранява грешки, подобрява производителноста.
Каква е разликата между ‘var’, ‘let’, ‘const’?
Кл. думи за деклариране на променливи, различават се по скоупа им.
‘const’ - константите не могат да променят стойноста си; блок скоуп;
‘let’ - могат да променят стойноста си; също са с блок скоуп;
‘var’ - ДЕКЛАРИРА променлива; глобален или функционален скоуп; !!!могат да се достъпват преди инициализацията им, това води до грешки!!!
Какви типове данни познавате в JavaScript?
Примитивни и референтни.
Примитивни: number, string, boolean, null, undefined, symbol
Референтни: object, array, function. допълнение - Date, regEx, Map, Set
Каква е разликата между ‘==’ и ‘===’?
Оператори за сравнение.
‘==’ - преди да направи сравнението, JS ще обърне двете стойности в един тип;
’===’ - сравнява стойностите без да променя техния тип.
Какво е type coercion?
Типовото преобразуване е автоматичното преобразуване на стойности от един тип в друг.
Какво са Higher-Order Functions и Callback functions?
HOF - приемат други функции като аргумент и връщат функция като резултат.
Callback - функция, която е подадена като аргумент на друга функция и се извиква по-късно, когато основната функция е завършила изпълнението си.
Какви типове функции познавате и каква е разликата между тях?
Function Declaration - деклариране на функция с име; function name(){}
Function Expression - закачаме функция към промелива, хойства се само променлива;
Arrow Function - съкращение на function expression, не поддържа .this;
HOF - map, filter, reduce;
разлика: работят с други функции подадени като аргумент и връщат функции;
Pure Functions - винаги връщат един и същ резултат;
разлика: нямат странични ефекти;
Странични ефекти - промени в резултата, console.log, изпращане на заявки;
IIFE (Immediately Invoked Function Expressions) - анонимна функция, която се извиква незабавно след дефинирането й, създават закрити области с обхват;
Какво е Hoisting?
Променливи и функции се издигат в техния скоуп по време на компилация на кода, преди той да бъде изпълнен.
Декларациите се издигат с цялото си тяло;
Expressions/ Arrow - функциите не се издигат, а само променливите, към които са закачени;
Всички променливи се издигат, но не могат да се използват преди инициализация;
Какво е Scope?
Област на виждане, определя видимостта и достъпността на променливи и функции в програмата;
Глобален - ако се дефинира извън функции и блок скоупове, достъпват се отвсякъде в програмата;
Локален - достъпват се само в определени части на програмата, дефинират се в блокове като ‘if’, ‘for’, ‘while’;
Функционален - във функциите и само в тях;
Блоков - чрез ‘let’, ‘const’ или { }, видими само в тях;
Лексически - определя се по време на парсинг процеса, а не по време на изпълнение, видимоста на променливите се определя от позицията им в кода;
Lexing-time - парсинг, компилация на кода, което се иползва от интерпретатора.
Динамичен - базира се на текущото състояние на стека по време на изпълнение;
Какво е Closure?
Closure е способността на функцията да запази достъп до своя лексически скоуп след като е завършила изпълнението си.
Виктор Вълчев: Функцията събира всичко нужно за нейното изпълнение и го държи вътре в себе си.
Какво е Exception?
Събитие, което настъпва по време на изпълнение на програма и прекъсва нормалния ход на действия. Предизвиква грешки.
Защо да използваме try{} catch{} блок?
Служи за обработка на Exceptions, управлява грешките по време на изпълнеине. В try блока вкарваме всички инструкции, които искаме да изпълним и биха хвърлили грешка; В catch блока хващаме тези грешки появили се в try блока.
Защо да използваме breakpoints?
Това са маркери, които дебъгера ни ги предоставя, чрез които да посочваме точно определно място в нашия код, където преограмата трябва да бъде спряна. Анализират се стойности по време на дебъгване.
Какво са template strings?
Позволяват създаването на string-ове с вградени изрази. Използва се апостроф ( `` ) и добавяме допълнителните изрази чрез ${}.
Какво са обектите? Защо се използват?
Референтен тип данни, които съдържат ключ-стойност двойнки като свойства.
Използват се за:
-организиране на данни като ключ-стойност;
-моделиране на реални концепции;
-групиране на функционалности и данни;
-достъп и манипулация на данни;
Какво е деструктурирането?
Метод за извиличане на стойности от масив или свойства от обекти и тяхното присвояване на променливи по по-кратък начин.
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
Как се копират данни?
Reference Copy - две променливи споделят същата референция (адрес в паметта). Тук промените в едната референция ще се отразят и в другата;
Shallow Copy - копираме примитивни типове данни по стойност, а обекти и функции - по референции. Ако копираме обекти, ще имаме референция, която ще сочи към оригиналния обект, няма да го копира. Промените се отразяват в копието и в оригинала;
Deep Copy - всички данни се копират и стават независими от оригинала;
const deepCopy = JSON.parse(JSON.stringify(original));
Какво са property descriptors?
Обекти, които предоставят допълнителна информация за свойството на обект. Описват атрибутите и поведението на свойството, като например дали могат да бъдат променяни, дали се обхожда и дали може да се конфигурира.
Какво са computed properties?
Функционалност, която позволява използването на израз като име на свойство при създаване или достъпване на обект.
const propertyName = “color”;
const myObject = {
[propertyName]: “red”, // Създава свойство с име “color” и стойност “red”
};
console.log(myObject.color); // “red”
Какво са циклите и какви типове има?
Позволява изпълнение на един блок код няколко пъти.
for - определен борй пъти;
while - докато условието е true;
do..while - кодът ще се изпълни веднъж преди проверките;
for..in - обхожда свойствата на обект;
for..of - обхожда стойности на масив;
Какво са масивите и защо да ги ползваме?
Линейна структура с множество стойности, индексира елементите, могат да се достъпват и манипулират чрез тях.
Предимства: елементите се съхраняват в една структура от данни; лесно се манипулират чрез цикли; лесно сортиране и филтриране;
Какво са NPM пакетите и какви са техните предимства?
Какво е package.json файлът?
Какво са NPM Scripts?
Какво са ES Modules?
Node Package Manager инсталира и управлява библиотеки и зависимости за Node.js проекти.
Предимства: лесно инсталиране, управление на версии, споделяне на код, голяма екосистема.
Package.json - конфиг файл, който съдържа информация за проекта и неговите зависимости.
NPM Scripts - команди дефинирани в package.json файла, позволяват тестове и др.
ES Modules - стандарт за модулна система.
Какво е Git? Зашо да го използваме?
Какво е GitLab?
Защо GitLab е по-различен от Git?
Какви глобални конфигурации трябва да се сетнат, за да използваме Git и каква им е ролята?
Какво е commit, каква информация съдържа?
Git - система за управления на версии, проследява промените в кода и работа между разработчиците.
Предимства: проследяване и история на промените;
лесна работа в екип;
съхранение на различни версии;
лесно възстановяване на стари версии;
GitLab - платформа, разлиакта, е че Git е самата система за управление, а GitLab е доставчика й.
За да се използва Git, ни трябват потребителско име и имейл.
Commit - промяна в кода подадена от разработчик. Съдържа: хеш код;
име и имейл на автора;
дата;
съобщение за комита;
Какво е Module и Revealing Module Pattern?
Модулът енкапсулира кода и го скрива от глобалния скоуп.
Revealing Module Pattern - шаблон за модулан система, return връща всичко, което искаме да е публично.
Защо да използваме методите на масивите (map, filter, reduce, forEach), вместо цикли?
Как работят те?
По-чист и декларативен код, по-малко грешки, повторно използване на код, оптимизирани за бърза работа с масиви.
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));