Javascript global değişkenler
bir değişkeni bildirmek arasında herhangi bir fark yoktur
var a=0;//1
ve bu şekilde
a=0;//2
ya
window.a=0;//3
küresel kapsam?
CEVAP
Evet, pratikte genellikle büyük onlar değil ama iki fark var.
Üç ifadelerinizi açıkladı
var a=0;
...bir değişken oluştururdeğişken nesneglobal yürütme içeriği olan küresel nesne, tarayıcılar, yumuşatılmış window
(ve bir DOM pencere nesne yerine genel bir nesne gibi olur olmayan tarayıcı uygulamaları). Sembol ** 16 yaşında, kendisi, aslında küresel bir özellik (pencere) kendisini işaret etmek için kullandığı nesne.
Tüm sonuç: silinemiyor window
bir özellik oluşturur. Ayrıca kodun ilk satırından önce (bkz: "Zaman var
olur" aşağıda). tanımlı değil
IE8 ve daha önce özelliği window
oluşturulmaz unutmayınsayısız(for..in
tablolarda görünmüyor). Internet Explorer 9, Chrome, Firefox, Opera, sayısız.
a=0;
...window
nesne üzerinde bir özellik oluştururörtülü olarak. Normal bir özellik olarak silebilirsiniz. Tavsiye ederimdeğilbunu yaparken, kimseyi sonra kodunuzu okumak için belirsiz olabilir.
Ve ilginçtir, IE8 tekrar ve daha önceki bir özellik yarattısayısız(for..in
tablolarda görünmüyor). Garip, özellikle de aşağıda.
window.a=0;
...window
nesne üzerinde bir özellik oluşturur açıkça. Normal bir özellik olarak silebilirsiniz.
Bu özelliksayısız, IE8 ve daha önceki, ve diğer her tarayıcı üzerinde çalıştım.
Dördüncü bir yol
Henüz başka bir yolu bunu yapmak için, btw var:
this.a=0;
..., this
global yürütme içeriği başvuruları nedeniyle küresel nesne. Yani this.a=0;
aynı window.a=0;
(dışında olabilir, sonra da hiçbir şey, hiçbir şey daha hızlı çünkü this
olmak zorunda değil baktı; muhtemelen imkansız ölçmek için herhangi bir gerçek dünya senaryo).
Bu window.a=0;
, ile aynı olduğu için, bu sayısız bir özellik (hatta ve aşağıda IE8) oluşturur sürpriz değil.
Özellikler siliniyor
Ben ne demek "silme" mi? Tam olarak bu özellik Çıkarma (tamamen) delete
anahtar kelime):
window.a = 0;
display("'a' in window? " ('a' in window)); // displays "true"
delete window.a;
display("'a' in window? " ('a' in window)); // displays "false"
delete
tamamen bir nesneden bir özelliği kaldırır. Yapamazsın bunu özellikleri eklendi window
dolaylı olarak) var
delete
ya da sessizce göz ardı ya da bir istisna atar (bağlı olarak JavaScript uygulaması ve ister misin katı modda).
UyarıInternet Explorer için izin verilmelidir bile window
nesnenin özelliklerini silmek izin vermez. Daha da kötüsü, bir atarözel durum(diğer tarayıcılarda IE vetry this experiment) deneyin. window
nesne silinirken, savunmaya geçmek zorunda:
try {
delete window.prop;
}
catch (e) {
window.prop = undefined;
}
Bu özelliği silmek için çalışır, ve eğer bir özel durum yoksa, bir sonraki en iyi şeyi yapar ve undefined
ayarlar özelliği.
Busadecewindow
nesne için geçerlidir ve sadece (bildiğim kadarıyla) YANİ. Diğer tarayıcılar window
özellikleri, kuralları yukarıda konu silme konusunda gayet iyi.
var
durumda
var
sürüm ve diğerleri arasında bir fark var. Sembolü oluşturulduğunda ilgilidir. Semboller var
deyimi ile tanımlanan önce oluşturulurherhangi biryürütme bağlamında adım adım kod çalıştırmak ve özelliği de varöncevar
deyim.
Bu kafa karıştırıcı olabilir, bir göz atalım:
display("foo in window? " ('foo' in window)); // displays "true"
display("window.foo = " window.foo); // displays "undefined"
display("bar in window? " ('bar' in window)); // displays "false"
display("window.bar = " window.bar); // displays "undefined"
var foo = "f";
bar = "b";
display("foo in window? " ('foo' in window)); // displays "true"
display("window.foo = " window.foo); // displays "f"
display("bar in window? " ('bar' in window)); // displays "true"
display("window.bar = " window.bar); // displays "b"
Gördüğünüz gibi, 49* *sembol ama bar
değil sembolü ilk satırın önce tanımlanır. Nerede var foo = "f";
deyim, orada gerçekten iki şey: tanımlama sembolü, hangi olmadan önce ilk satır kod çalıştırmak; bir atama için bu sembol, hangi gerçekleştiği hat olduğunu adım adım akış. (Poor misunderstood var
)
Konu dışı: window
yığılan Kaçının
window
nesne özellikleri ile çok çok curcuna oluyor. Mümkün olduğunda, şiddetle karışıklık ekleyerek öneririz. Bunun yerine, küçük bir paket içinde semboller sarın ve ihracatenwindow
bir sembol nesne. (Ben sık sık verme sakınherhangi birwindow
nesne simgeler.) Simgeler kontrol altına almak için tüm kodunuzu içeren bir fonksiyonunu kullanabilirsiniz, Bu fonksiyon Eğer isterseniz anonim olabilir:
(function() {
var a = 0; // `a` is NOT a property of `window` now
function foo() {
alert(a); // Alerts "0", because `foo` can access `a`
}
})();
Bu örnekte, bir fonksiyon tanımlamak ve hemen (sonunda ()
) çalıştırılmış.
Fonksiyon bu şekilde sık sık kullanılan bir denirölçüm fonksiyonu. Fonksiyonlar ölçüm fonksiyonu içinde tanımlı oldukları için değişkenleri ölçüm işlevi tanımlı erişebilirsinizkilitlerbu veri (bkz: Closures are not complicated).
Global ve yerel değişkenler R...
JavaScript bir fonksiyon içinde global...
CoffeeScript Ve Global Değişkenler...
/Yerel değişkenler global değişkenler ...
Bir işlevi onları yaratan daha büyük k...