En son web geliştirme öğreticiler
 

JavaScript Closures


JavaScript değişkenleri yerel veya küresel kapsam ait olabilir.

Özel değişkenler kapanışları ile mümkün hale getirilebilir.


Küresel Değişkenler

Bir fonksiyon aşağıdaki gibi işlevi içinde tanımlanan tüm değişkenler, erişebilir:

Örnek

function myFunction() {
    var a = 4;
    return a * a;
}
Kendin dene "

Ama bir işlev de böyle fonksiyonu dışında tanımlanan değişkenler, erişebilir:

Örnek

var a = 4;
function myFunction() {
    return a * a;
}
Kendin dene "

Son örnekte, bir küresel değişkendir.

Bir web sayfasında, küresel değişkenler pencere nesnesine aittir.

Küresel değişkenler kullanılabilir (and changed) tüm komut dosyaları tarafından sayfasında (and in the window) .

İlk örnekte, bir yerel bir değişkendir.

Yerel değişken sadece tanımlı olduğu için işlev içinde kullanılabilir. Diğer fonksiyonlar ve diğer betik koddan gizlenir.

Aynı isimde Küresel ve yerel değişkenler farklı değişkenlerdir. birini değiştirme, diğer değiştirmez.

Anahtar kelime var olmadan oluşturulan Değişkenler, bir işlev içinde oluşturulan bile, her zaman geneldir.


Değişken Ömür

Küresel değişkenler uygulamanıza sürece yaşamak (/ web sayfası pencere) yaşar.

Yerel değişkenler kısa hayatları var. Onlar işlev çağrıldığında oluşturulur ve fonksiyon bittiğinde silinir.


Bir Sayaç İkilemi

Bir şey sayılması için bir değişken kullanmak istiyorsanız ve bu sayaç tüm fonksiyonlar için kullanılabilir olmasını istediğinizi varsayalım.

Sen sayacı arttırmak için küresel bir değişkeni ve bir işlevi kullanabilirsiniz:

Örnek

var counter = 0;

function add() {
    counter += 1;
}

add();
add();
add();

// the counter is now equal to 3
Kendin dene "

Sayaç yalnızca tarafından değiştirilmelidir add() fonksiyonu.

Sorun sayfasındaki herhangi bir komut dosyası uğramadan, sayaç değiştirebilir yani, add() .

Ben işlevi içinde sayacı bildirirseniz, kimse uğramadan bunu değiştirmek mümkün olacak add() :

Örnek

function add() {
    var counter = 0;
    counter += 1;
}

add();
add();
add();

// the counter should now be 3, but it does not work !
Kendin dene "

İşe yaramadı! Ben her zaman add() fonksiyonu, sayaç 1 olarak ayarlanır.

Bir JavaScript iç işlev bunu çözebiliriz.


JavaScript İçiçe İşlevleri

Tüm fonksiyonlar global etki erişebilir.

Aslında, JavaScript, tüm fonksiyonlar kapsamı erişebilir "above" onlara.

JavaScript iç içe işlevleri destekler. İç içe işlevler kapsam erişebilir "above" onlara.

Bu örnekte, iç işlev plus() ana işlevi karşı değişken erişimi vardır:

Örnek

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
Kendin dene "

Biz ulaşabilir, bu sayaç ikilem çözmüş olabilirdi plus() dışarıdan işlevini.

Biz de sadece bir kez sayacı = 0 yürütmek için bir yol bulmalıyız.

Bir kapanması gerekir.


JavaScript Closures

kendinden çağırma işlevleri hatırla Bu fonksiyon ne yapar?

Örnek

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3
Kendin dene "

Örnek Açıklaması

Değişken eklenti kendinden yürütmesini işlevinin dönüş değeri verilir.

kendinden yürütmesini fonksiyonu sadece bir kez çalışır. Bu sıfıra sayaç ayarlar (0) , ve bir işlev ifadesi döndürür.

Bu şekilde eklenti bir fonksiyonu olur. "wonderful" bölümü, bu ana kapsamında sayaç erişebilmenizdir.

Bu bir JavaScript kapatma denir. Bu mümkün bir işlev sahibi olmasını sağlar " private " değişkenleri.

Sayaç anonim fonksiyonunun kapsamı ile korunmaktadır ve sadece eklenti fonksiyonu kullanılarak değiştirilebilir.

Bir kapak üst işlevi kapalı sonra bile, üst etki için bir işlev sahip olan erişim.