2011-11-29 4 views
5

Ben Cherry'in "JavaScript Module Pattern: In-Depth" nu okuyordum ve tam olarak anlamadığım bir örnek kod vardı.Bu değişken bildirimde neden bu değişkeni kendisine atar?

var _private = my._private || {} 

nedir:

var _private = my._private = my._private || {} 

Bu böyle bir şey yazma farklı görünmüyor: Çapraz Dosya Özel Durum başlığı altında aşağıdaki sahiptir bazı örnek kod var burada oluyor ve bu iki deklarasyon nasıl farklı?

+0

Açıkçası bağlam eksik ama ikinci örnek 'my._private' ... 'ayarlamıyor ...: -? –

+0

@ ÁlvaroG.Vicario, ikinci örneğin ilk ile aynı olmadığı konusunda haklısınız. – jcolebrand

cevap

7
var _private = my._private = my._private || {} 

Bu çizgi varsa, aksi takdirde yeni bir obje yaratması ve my._private ayarlayın, my._private kullanımı anlamına gelir.

Bir ifadede birden fazla atama ifadesi kullanılabilir. Atama operatörü, sağına ne olursa olsun kullanır (tüketir) ve atanan değişkenin solundaki çıktısı olarak bu değeri üretir. Yani, bu durumda, açıklık için parantez ile, yukarıdaki var _private = (my._private = (my._private || {}))

Bu durum lazy initialization türüdür. Daha az veciz versiyonu olacaktır:

Bu durumda
if (!my._private) { 
    my._private = {}; 
} 
var _private = my._private; 

, tembel başlatma tembellik daha yerde başlatma için daha çok kullanılan görünüyor. Diğer bir deyişle, tüm fonksiyonları my._private güvenli bir şekilde oluşturmak veya mevcut var olanı yok etmeden kullanmak için bu satırı içerebilir.

+0

Gerçekten. Ve beni düzenlemek için yendi, çünkü ne demek istediğini biliyordum ;-) – jcolebrand

+0

@jcolebrand Düzenleme sırasında geçiş yaptığım için Programcılar'dan kopyalamak zorunda kaldım :) – Nicole

+0

oh berbat: \ – jcolebrand