Məzmuna keçin
  • Kateqoriyalar
  • Ən yeni
  • Teqlər
  • Populyar
Yığmaq
Brend loqosu
  1. Əsas səhifə
  2. Front-end
  3. JavaScript
  4. JavaScript-də Closure

JavaScript-də Closure

Planlaşdırılıb Sabitlənib Kilidlənib Köçürülüb JavaScript
closureasinxron
1 Yazı 1 Yazarlar 18 Baxış
  • Ən köhnədən yeniyə
  • Ən yenidən köhnəyə
  • Ən çox səs
Cavab ver
  • Mövzu olaraq cavablandır
🔑 Daxil ol
Bu mövzu silindi. Yalnız mövzu idarəçiliyi imtiyazlarına malik olan istifadəçilər onu görə bilər.
  • codexC Oflayn
    codexC Oflayn
    codex
    üzərində yazmışdı sonuncu dəfə tərəfindən redaktə edilib
    #1

    Closure JavaScript-də çox vacib və güclü bir anlayışdır. Bu anlayışı bilmək funksiyaların necə işlədiyini daha dərindən anlamağa kömək edir və bir çox qabaqcıl texnikaların əsasını təşkil edir.

    Sadə dillə desək, closure — bir funksiyanın özünün daxilində yaradıldığı mühitə (scope) çıxış əldə etməsi deməkdir, hətta o mühit artıq mövcud olmasa belə.


    Closure necə işləyir?

    JavaScript-də bir funksiya başqa bir funksiyanın içində yaradıldıqda, daxili funksiya xarici funksiyanın dəyişənlərinə çıxış edə bilir. Bu əlaqə closure adlanır.

    Başqa sözlə:

    • Daxili funksiya (inner function) xarici funksiyanın (outer function) dəyişənlərini “yada saxlayır” və istifadə edə bilir.

    Sadə bir nümunə

    function salamVer(name) {
        return function() {
            console.log(`Salam, ${name}!`);
        };
    }
    
    const salamNilay = salamVer('Nilay');
    salamNilay(); // Salam, Nilay!
    

    İzah:

    • salamVer funksiyası içində yeni bir funksiya qaytarır.
    • salamNilay dəyişənində salamVer funksiyası çağırılır və name dəyişəninin dəyəri Nilay olaraq yadda qalır.
    • Sonra salamNilay() çağırıldıqda, o, name dəyişəninə çıxış edir, baxmayaraq ki, salamVer funksiyası artıq icrasını bitirib.

    Bu closure nümunəsidir.


    Closure aşağıdakı hallarda faydalıdır:

    1. Məlumatların gizlədilməsi (Data encapsulation)
    2. Özəl dəyişənlər yaratmaq
    3. Funksiya fabrikləri (function factories)
    4. Currying və partial application texnikaları
    5. Asinxron kodda (məsələn, setTimeout ilə) düzgün dəyişən tutmaq

    Closure ilə dəyişənlər yaratmaq

    Closure bizə özəl (private) dəyişənlər yaratmağa imkan verir.

    Nümunə:

    function saygacYarat() {
        let say = 0;
        return {
            artir: function() {
                say++;
                console.log(say);
            },
            sifirla: function() {
                say = 0;
                console.log('Sıfırlandı');
            }
        };
    }
    
    const saygac = saygacYarat();
    saygac.artir(); // 1
    saygac.artir(); // 2
    saygac.sifirla(); // Sıfırlandı
    saygac.artir(); // 1
    

    İzah:

    • say dəyişəni saygacYarat funksiyası daxilindədir və birbaşa çöldən çıxış mümkün deyil.
    • Amma artir və sifirla funksiyaları say dəyişəninə çıxış edə bilir.

    Closure və Dövrlər (Loops)

    Closure istifadə edərkən for dövrlərində klassik səhvlər edilə bilər.

    Problemli nümunə:

    for (var i = 0; i < 3; i++) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }
    // 3
    // 3
    // 3
    

    İzah:

    • Bütün funksiyalar eyni i dəyişəninə bağlıdır və dövr bitəndə i=3 olur.

    Doğru yanaşma (let ilə):

    for (let i = 0; i < 3; i++) {
        setTimeout(function() {
            console.log(i);
        }, 1000);
    }
    // 0
    // 1
    // 2
    

    let dəyişəni blok səviyyəli olduğuna görə hər dəfə yeni bir i yaradılır və closure düzgün işləyir.


    Closure İlə Function Factory

    Funksiya fabrikləri closure istifadə edir:

    function multiplier(x) {
        return function(y) {
            return x * y;
        };
    }
    
    const twoTimes = multiplier(2);
    const threeTimes = multiplier(3);
    
    console.log(twoTimes(5)); // 10
    console.log(threeTimes(5)); // 15
    
    • multiplier(2) çağırışında x=2 dəyəri yadda qalır və iki dəfə artıran funksiya yaranır.

    Closure xüsusiyyətləri

    Xüsusiyyət Təsviri
    Mühit Closure funksiyanın yaradıldığı mühiti saxlayır
    Uzunömürlülük Closure-lar lazımi dəyişənləri yadda saxlayır, mühit bağlansa da işləyir
    Özəl dəyişənlər Closure ilə xaricdən dəyişdirilə bilməyən dəyişənlər yaradıla bilər

    Nəticə

    Closure JavaScript proqramlaşdırmasında çox güclü bir anlayışdır. Bu konsepti başa düşmək kodunuzu daha güclü, çevik və təhlükəsiz edəcəkdir. Closure-ları başa düşən proqramçı asinxron əməliyyatları, modul dizaynını və kompleks funksiyaları daha rahat idarə edə bilər.

    Unutmayın: Closure — funksiyanın yadda saxladığı gizli bağdır.

    1 cavab Son cavab
    Cavab ver
    • Mövzu olaraq cavablandır
    🔑 Daxil ol
    • Ən köhnədən yeniyə
    • Ən yenidən köhnəyə
    • Ən çox səs




    Bilik paylaşdıqca artan bir sərvətdir
    • Daxil ol

    • Sizin hesabınız yoxdur? Qeydiyyatdan keç

    • Axtarış etmək üçün daxil olun və ya qeydiyyatdan keçin.
    • İlk yazı
      Son yazı
    0
    • Kateqoriyalar
    • Ən yeni
    • Teqlər
    • Populyar