JavaScript Kapalı Fonksiyon
- Önceki Sayfa JS Fonksiyon Bağlama
- Sonraki Sayfa JS Sınıfı Tanıtımı
JavaScript 变量属于yerel
veyagenel
alan
genel değişkenlerKapalı fonksiyon
yerel (özel) gerçekleştirebilir.
genel değişkenler
fonksiyonlar fonksiyonları erişebiliriçtanımladığı tüm değişkenleri
Örnek
function myFunction() { var a = 4; return a * a; }
Ancak fonksiyonlar fonksiyonları da erişebilirdıştanımlanan değişkenler, örneğin:
Örnek
var a = 4; function myFunction() { return a * a; }
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
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.
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.
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; }
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
Ö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.
- Önceki Sayfa JS Fonksiyon Bağlama
- Sonraki Sayfa JS Sınıfı Tanıtımı