Перейти до основного контенту

Як працює хойстінг

3 хв читання
314 переглядів

Hoisting-це концепція в мові програмування JavaScript, яка є процесом переміщення оголошень змінних та функцій у верхню частину свого обсягу перед виконанням коду. Це означає, що, незважаючи на те, що в коді ви оголошуєте їх у певному місці, JavaScript перед виконанням перенесе ці оголошення наверх.

Hoisting-це внутрішня операція інтерпретатора JavaScript і не є явно написаною частиною коду. Однак розуміння того, як працює hoisting, може допомогти вам уникнути деяких потенційних помилок та створити більш зрозумілий та Підтримуваний код.

Hoisting застосовується до декларацій змінних та функцій, але обробляється по-різному. Змінні, оголошені за допомогою ключового слова var, піднімаються вгору області видимості, але їх ініціалізація залишається на місці, що може призвести до небажаної поведінки. Функції, оголошені за допомогою ключового слова function, повністю піднімаються вгору області видимості, включаючи і їх тіло. Це дозволяє викликати функцію до її фактичного оголошення в коді.

Загальне правило: оголошення змінних і функцій піднімаються вгору області видимості, але їх ініціалізація не рухається.

У цій статті ми розглянемо докладніше, як hoisting працює для змінних і функцій, наведемо приклади, щоб проілюструвати його і моменти, які необхідно враховувати при написанні коду. Також ми розглянемо відмінності між hoisting в var і в оголошеннях за допомогою let і const, які були представлені в сучасних версіях JavaScript.

Що таке hoisting?

Hoisting в програмуванні JavaScript являє собою процес, при якому всі оголошення змінних і функцій переміщаються вгору в область видимості перед виконанням коду. Це означає, що можна отримати доступ до змінних та функцій до їх фактичного оголошення в коді.

Під час hoisting оголошення змінних за допомогою ключових слів var, let і const переміщуються в початок області видимості, але їх значення залишаються невизначеними до моменту ініціалізації. При hoisting оголошення функцій, які створюються з використанням ключового слова function, будуть переміщені в початок області видимості і будуть доступні з будь-якого місця в області видимості.

Hoisting може призвести до непередбачуваних результатів та помилок, тому рекомендується завжди оголошувати змінні та функції перед їх використанням, щоб уникнути плутанини та неоднозначності в коді.

Як працює hoisting у JavaScript

Під час компіляції JavaScript-коду, інтерпретатор переглядає весь код і знайдені оголошення переміщує вгору коду перед його фактичним виконанням. Це дозволяє використовувати змінні та викликати функції до їх оголошення.

Процес hoisting інтерпретатором JavaScript можна уявити, як ніби всі оголошення переміщаються в самий початок поточного контексту виконання.

Для змінних hoisting означає, що змінні можуть бути використані до їх фактичного оголошення. Однак, змінні все одно повинні бути оголошені з використанням ключового слова var, let або const всередині поточного контексту виконання.

Для функцій hoisting означає, що функції можуть бути викликані до їх фактичного оголошення. Функції, оголошені з використанням оголошення функції (function declaration), можуть бути викликані в будь-якому місці коду, включаючи до їх оголошення. Функції, оголошені з використанням виразу функції (function expression), можуть бути викликані тільки після їх оголошення.

Однак, незважаючи на підняття оголошення змінних і функцій вгору коду, hoisting не піднімає ініціалізацію змінних, їх присвоювання значень і вирази.

Hoisting може бути корисним, але також може призвести до помилок і непередбачуваної поведінки, особливо якщо код не написаний акуратно і закінчено. Щоб уникнути несподіваної поведінки, рекомендується завжди оголошувати змінні та функції перед їх використанням у коді.

Види hoisting

Існує два основних види hoisting'а:

ТипОпис
Hoisting зміннихЗмінні оголошені з використанням ключового слова var або let піднімаються в початок області видимості, але їм присвоюється значення undefined до фактичного визначення.
Hoisting функційФункції, оголошені за допомогою ключового слова function, також піднімаються на початок області дії і можуть бути викликані до їх оголошення в коді.

Крім цих основних видів, також існує hoisting з використанням стрілочних функцій (arrow functions) і КЛАСІВ (classes), але на відміну від звичайних функцій і змінних, вони не піднімаються і не можуть бути викликані до оголошення.

Всі види hoisting'а можуть викликати плутанину і неочевидну поведінку в коді, тому важливо пам'ятати про цю особливість JavaScript і використовувати її з обережністю.