Skip to main content

Змінна до оголошення

1. Усе починається зі спливання (Hoisting)

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

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


2. Різні типи оголошень поводяться по-різному

var

Змінні, оголошені через var, спливають з ініціалізацією значенням undefined.

javascript
console.log(a); // undefined var a = 10; console.log(a); // 10

Пояснення: Під час компіляції JS «піднімає» var a;, але не присвоює a = 10;. Тому в момент першого console.log(a) змінна вже існує, але ще не ініціалізована.


let і const

Змінні, оголошені через let і const, теж спливають, але потрапляють у «тимчасову мертву зону» (Temporal Dead Zone, TDZ), період від початку області видимості до рядка оголошення.

Спроба звернутися до них до оголошення викличе помилку:

javascript
console.log(b); // ReferenceError: Cannot access 'b' before initialization let b = 20; console.log(c); // ReferenceError const c = 30;

До рядка let b = 20; змінна існує логічно, але доступ до неї заборонений - це захист від помилок.


function

Функції, оголошені через function declaration, спливають повністю, включно з тілом функції:

javascript
sayHi(); // "Hi!" function sayHi() { console.log('Hi!'); }

Тому їх можна викликати до оголошення.

Але якщо функція оголошена як function expression (через const, let, var), то поведінка залежатиме від типу змінної:

javascript
sayHello(); // ReferenceError const sayHello = function() { console.log('Hello!'); };

Коротко: що станеться при використанні змінної до оголошення

Тип оголошенняЧи можна використовувати до оголошення?Що станеться
varТак, але значення буде undefinedНемає помилки, але часто джерело багів
letНіReferenceError (тимчасова мертва зона)
constНіReferenceError (тимчасова мертва зона)
function declarationТакФункція доступна повністю

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.