15 основни термина в JavaScript

1 април
Георги Цолов, Senior JavaScript разработчик в DataArt България
15 основни термина в JavaScript
JavaScript претърпя силно развитие през последните години и към днешна дата не показва признаци на забавяне. В резултат на това търсенето на такъв тип специалисти нараства, а JS терминологията се обогатява все повече. В тази статия са представени някои от най-важните термини, които се използват в ежедневната работа с JavaScript и тяхното значение:
  1. Scope е референция към контекста на кода, която определя в коя част на кода могат да бъдат достъпни определени данни. За разлика от някои типизирани езици, Scope не е толкова стриктен, но има своите особености. В JavaScript има няколко вида Scope - глобален, локален, блоков и лексикален.
  2. Closure е комбинация от функции, обединени от друга функция, които имат достъп до заобикалящите го данни. С други думи Closure дава достъп до данните от дадена функция с помощта на вътрешни функции. Closure е полезен, тъй като може да се асоциират данни с дадена функция, чиито данни да не са достъпни извън нея. Това е препратка към обектно-ориентираното програмиране, където с даден обект може да се асоциират данни с един или повече метода.
  3. Hoisting е базово поведение на JavaScript, при което декларираните променливи се преместват най-отгоре в кода. Интересното при JavaScript е, че променлива може да бъде декларирана след като е била вече използвана. С въвеждането на променливите от типовете let и const, донякъде този проблем е минимизиран, тъй като би предизвикало грешка, ако се опитаме да декларираме let променлива, след като сме я използвали.
  4. Anonymous Функция е функция, която няма никакво име, асоциирано със себе си. Обикновено използваме думата function преди името на самата функция или задаваме function на променлива, но при Anonymous функциите няма подобно поведение. С въвеждането на новите стандарти от ES6 вече имаме и така наречените Аrrow функции, които ни предоставят опростен синтаксис за декларирането на Anonymous функции.
  5. IIFE (Immediately Invoked Function Expression) са функции, които се изпълняват веднага след като бъдат дефинирани. Състоят се от две действия. Първото е да се дефинира Anonymous Функция, енкапсулирана в групиращ оператор. А втората част е моментално да се извика тази Anonymous Функция извън групирания оператор.
  6. Mutation - промяната на моментното състояние на данните се нарича „мутация“. Мутирането на данните в JavaScript не е добра практика и точно поради тази причина използваме и понятието Immutability, което ни помага да запазим моментното състояние на данните чисто и да създадем нова инстанция, с която да работим. Тази техника прави данните ни предсказуеми, подобрява бързината на нашето приложение и помага за лесното проследяване на промените по нашите данни.
  7. Chaining е модел в JavaScript, при който много на брой функции се извикват една след друга за даден обект. Най-лесната препратка за това може да се направи при jQuery, където след даден селектор могат да бъдат извикани N на брой метода, които да променят дадения стил на елемента или неговата стойност. За да може да направим Chaining на даден обект, ние трябва да върнем референция към обекта във всеки един от неговите методи.
  8. First-Class Функция - въпреки че този термин не се отнася конкретен само за JavaScript, а за програмните езици като цяло, все пак е хубаво да го споменем и в тази статия. First-Class функция е третирана както всяка друга променлива. Например дадена функция може да бъде подадена като параметър на друга функция, може да бъде върната от друга функция и също може да е част от променлива.
  9. High Order Функция е функция, която приема друга функция като аргумент или връща нова функция като резултат. High Order функциите са възможни само и единствено благодарение на First-class Функциите.
  10. Pure Функции са функции, които приемат даден аргумент и връщат стойност, без да променят каквито и да било данни извън собствения си Scope.
  11. Mixins могат да бъдат описани като клас, който съдържа методи, които могат да бъдат използвани от други класове, без да ги наследяват. Mixins предоставя само помощни методи и не се използва самостоятелно. Mixins са необходими, тъй като в JavaScript е възможно да наследи само от един обект.
  12. Prototypes е механизмът, чрез който обектите в JavaScript могат да наследяват различни характеристики един от друг. Може да се направи аналогия към обектно ориентираното програмиране и класовете, където Prototypes би ви дало достъп до сърцевината на класа и бихте могли да добавяте допълнителни методи в него.
  13. Event Loop е тайната зад асинхронното поведение на JavaScript. Всички операции на този език се изпълняват само от една нишка. Благодарение на Event Loop се създава илюзията, че имаме множество нишки в JavaScript. Event Loop е отговорен за обединяване и изпълняване на кода, и изпълняване на под задачи, които са наредени на опашка.
  14. Promise е обект, който представлява евентуалното успешно или неуспешно приключване на асинхронна операция и връща съответния резултат. Promise биват въвеждани с цел да може да се предотврати така наречения Callback Hell от миналото, който прави кода нечетим и труден за дебъгване. Разбира се, с въвеждане на все по-нови стандарти в JavaScript, има и нови решения на този проблем, като едно от последните е async/await методологията.
  15. Currying не се използва само в JavaScript, но и в други програмни функционално ориентирани езици. Това е процес, при който дадена функция се трансформира от функция с много аргументи, към такава с поредица от подфункции. Currying функцията връща следващата функция от поредицата. Лесен пример за това може да дадем с функция multiply (1,2,3), която след Currying ще стане multiply (1)(2)(3).