JavaScript-də hoisting
-
Hoisting JavaScript-də olduqca vacib və bəzən çaşdırıcı bir anlayışdır. Bu anlayışı düzgün başa düşmək səhvlərin qarşısını almağa kömək edir və kodun necə işlədiyini daha yaxşı anlamağımıza səbəb olur.
Sadə dillə desək, hoisting o deməkdir ki, bütün dəyişənlərin və funksiyaların tanımlamaları (declarations) avtomatik olaraq kodun başlanğıcına “qaldırılır”.
Yəni, siz dəyişən və ya funksiyanı kodda sonradan yazsanız belə, JavaScript onu icra etməzdən əvvəl başa keçirir və hazır vəziyyətə gətirir.
Dəyişənlərdə hoisting
JavaScript-də
var
,let
vəconst
ilə elan edilmiş dəyişənlər fərqli şəkildə hoisting olur.1.
var
ilə hoistingvar
ilə elan edilən dəyişənlər tam şəkildə undefined dəyəri ilə yuxarıya qaldırılır.Nümunə:
console.log(a); // undefined var a = 5; console.log(a); // 5
İzah:
- JavaScript əvvəlcə
var a;
sətrini avtomatik olaraq kodun əvvəlinə gətirir. - Ona görə də birinci
console.log(a);
zamanı a dəyişəni mövcuddur, amma dəyəriundefined
olur.
Əslində kod belə görünür:
var a; console.log(a); // undefined a = 5; console.log(a); // 5
2.
let
vəconst
ilə hoistinglet
vəconst
ilə elan edilən dəyişənlər də hoisting olunur, amma onlar Temporal Dead Zone (TDZ) adlanan bir mərhələyə düşürlər.Bu zaman dəyişən elan olunana qədər istifadə edilərsə, ReferenceError səhvi alınır.
Nümunə:
console.log(b); // ReferenceError: Cannot access 'b' before initialization let b = 10;
Nümunə
const
üçün də eynidir.Bu kod belə görünür:
// b hoisted olur, amma dəyəri yoxdur, TDZ-dadır let b; console.log(b); // ReferenceError b = 10;
Funksiyalarda hoisting
Funksiya elan etmənin (function declaration) və funksiya ifadələrinin (function expression) hoisting davranışı da fərqlidir.
1. Funksiya elanları (Function Declarations)
Funksiya elanları tam şəkildə hoisting olunur. Yəni funksiya koddan əvvəl çağırıla bilər.
Nümunə:
greet(); // "Salam!" function greet() { console.log('Salam!'); }
İzah:
- JavaScript bütün funksiyanı yuxarı qaldırır, ona görə
greet
funksiyasını əvvəl çağırmaq mümkündür.
2. Funksiya ifadələri (Function Expressions)
Funksiya ifadələri hoisting olunur, amma onlar dəyişən kimi davranır. Əgər
var
ilə elan ediliblərsə,undefined
,let
vəconst
ilə elan ediliblərsə, ReferenceError verirlər.Nümunə (var ilə):
console.log(add); // undefined var add = function() { console.log('Toplama'); }; add();
Nümunə (let/const ilə):
console.log(subtract); // ReferenceError const subtract = function() { console.log('Çıxma'); }; subtract();
Hoisting ümumiləşdirilmiş cədvəl
Növü Hoisting vəziyyəti var
dəyişəniQaldırılır, başlanğıc dəyəri undefined
let
/const
dəyişəniQaldırılır, amma TDZ-dədir Funksiya elanları Tam qaldırılır və istifadəyə hazırdır Funksiya ifadələri Qaldırılır, amma dəyişənin hoisting qaydalarına uyğundur
Praktik töhvsiyələr
let
vəconst
istifadə edin: Daha təhlükəsiz və oxunaqlı kod üçün.- Funksiyaları əvvəlcədən elan edin: Oxumağı və anlamağı asanlaşdırır.
- Dəyişənləri istifadə etməzdən əvvəl elan edin: Səhv ehtimalını azaldır.
Nəticə
Hoisting JavaScript-in əsas və vacib xüsusiyyətlərindən biridir. Dəyişənlərin və funksiyaların necə “qaldırıldığını” bilmək kod səhvlərindən yayınmağa və proqramın necə işlədiyini daha yaxşı anlamağa kömək edir.
Unutmayın:
var
təhlükəli hoisting davranışına səbəb ola bilər,let
vəconst
isə daha təhlükəsizdir! - JavaScript əvvəlcə
Bilik paylaşdıqca artan bir sərvətdir