JavaScript Kapalı Fonksiyon

JavaScript 变量属于yerelveyagenelalan

genel değişkenlerKapalı fonksiyonyerel (özel) gerçekleştirebilir.

genel değişkenler

fonksiyonlar fonksiyonları erişebilirtanımladığı tüm değişkenleri

Örnek

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

Kişisel olarak deneyin

Ancak fonksiyonlar fonksiyonları da erişebilirdıştanımlanan değişkenler, örneğin:

Örnek

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

Kişisel olarak deneyin

Son örnekte,a olduğu gibigeneldeğişken

Web sayfasında, genel değişkenler window nesnesine aittir.

Genel değişkenler, sayfada (ve pencerede) bulunan tüm betikler tarafından kullanılabilir ve değiştirilebilir.

İlk örnekte,a olduğu gibiyereldeğişken

Yerel değişkenler sadece tanımlandıkları fonksiyon içinde kullanılabilir. Diğer fonksiyonlar ve betik kodu için görünmezler.

Aynı adı taşıyan genel ve yerel değişkenler farklı değişkenlerdir. Birini değiştirdiğinizde diğerini değiştirmeyecektir.

aracılığıylakelime var Oluşturulan değişkenler her zaman genel olacaktır, hatta fonksiyon içinde oluşturulsa bile.

Değişkenin yaşam döngüsü

Genel değişkenler, uygulamanız (pencere, web sayfası) kadar uzun ömürlüdür.

Yerel değişkenler uzun ömürlü değildir. Onlar fonksiyon çağrıldığında oluşturulur ve fonksiyonun tamamlanmasıyla silinir.

Bir sayısal değişkenin çelişkisi

Değişken kullanarak sayı sayısını artırmak istiyorsanız ve bu sayısal değişkenin tüm fonksiyonlar için kullanılabilir olmasını istiyorsanız:

Genel değişken ve fonksiyonları kullanarak sayısal değişkeni artırabilirsiniz:

Örnek

// Sayısal değişkeni başlatma
var counter = 0;
// Sayısal değişkeni artıran fonksiyon
function add() {
  counter += 1;
}
// add() üç kez çağrıldı
add();
add();
add();
// Şu anda sayısal değişken 3 olmalıdır

Kişisel olarak deneyin

Bu çözümde bir sorun var: Sayfadaki herhangi bir kod, add() çağrılmadan sayısal değişkeni değiştirebilir.

add() fonksiyonu için, sayısal değişkenin yerel olması gerekir, böylece diğer kodlar değiştirmesi engellenir:

Örnek

// Sayısal değişkeni başlatma
var counter = 0;
// Sayısal değişkeni artıran fonksiyon
function add() {
  var counter = 0; 
  counter += 1;
}
// add() üç kez çağrıldı
add();
add();
add();
// Şu anda sayısal değişken 3 olmalıdır. Ancak 0'dır.

Kişisel olarak deneyin

Kullanışsız, çünkü genel sayısal değişkeni değil yerel sayısal değişkeni gösteriyoruz.

Fonksiyonu döndürerek, genel sayısal değişkeni silebilir ve yerel sayısal değişiciye erişebiliriz:

Örnek

// Sayısal değişkeni artıran fonksiyon
function add() {
  var counter = 0; 
  counter += 1;
  return counter;
}
// add() üç kez çağrıldı
add();
add();
add();
// Şu anda sayısal değişken 3 olmalıdır. Ancak 1'dir.

Kişisel olarak deneyin

Kullanışsız, çünkü her fonksiyon çağrıldığında yerel sayısal değişken yeniden başlatılır.

JavaScript iç fonksiyonları bu sorunu çözebilir.

JavaScript iç fonksiyonları

Tüm fonksiyonlar genel alanı erişebilir.

Aslında, JavaScript'te tüm fonksiyonlar 'üst' alanına erişme hakkına sahiptir.

JavaScript iç fonksiyonları destekler. İç fonksiyonlar üst alanı erişebilir.

Bu örnekte, iç fonksiyon plus() eğer üst fonksiyon içindeyse counter sayısal değişken:

Örnek

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

Kişisel olarak deneyin

Bu şekilde sayaç sorununu çözebiliriz, eğer dışarıdan erişebilseniz plus() fonksiyonu.

Ayrıca bir kez çalışacak bir fonksiyon bulmamız gerekiyor counter = 0 yöntemi.

Kapalı fonksiyon (closure) ihtiyacımız var.

JavaScript Kapalı Fonksiyon

Kendiliğinden çağrılan fonksiyonları hatırlıyor musunuz? Bu tür fonksiyonlar ne yapar?

Örnek

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
add();
add();
add();
// Sayaç şu anda 3 

Kişisel olarak deneyin

Örnek Açıklaması

değişken add değerlendirmesi, kendiliğinden çağrılan fonksiyonun dönüş değeridir.

Bu kendiliğinden çağrılan fonksiyon sadece bir kez çalışır. Sayaç'ı sıfıra (0) ayarlar ve fonksiyon ifadesi döndürür.

Bu şekilde add fonksiyonu bir fonksiyon haline gelir. En 'çarpıcı' kısım, ebeveyn alanındaki sayaç'a erişebilmesidir.

olarak adlandırılır. Kapalı fonksiyon. Bu, fonksiyonun 'ÖzelDeğişken olası hale gelir.

Sayaç, bu adım adım fonksiyonun alanı tarafından korunur ve sadece add fonksiyonu ile değiştirilebilir.

Kapalı fonksiyon, ebeveyn alanına erişim hakkına sahip olan ve ebeveyn fonksiyonu kapanmış olsa bile fonksiyondur.