2014-04-28 24 views
10

kimse bu (ilk etapta basit görünüyor) tarayıcısı tarafından yorumlanır nasıl adımlara benim için yıkmak Can:Bu basit javascript komut dosyası nasıl çalışır (kapsam belirleme olabilir)?

var a = 1; 
function b() { 
a = 10; 
function a() {} 
} 
b(); 
alert(a); 

Başka bir şey için bir işlev adını değiştirmek istiyorsanız bunun 1. getirecek, vs: bu 10.

+1

Arrgh, bu örnek, sık kullandığınız arama motoruna tam kodu koyabileceğiniz ve faydalı sonuçlar alabileceğiniz çok yaygındır… – Bergi

cevap

13

var ile bildirilen bir değişkenin kapsamı uyaracaktır

var a = 1; 
function b() { 
a = 10; 
function m() {} 
} 
b(); 
alert(a); 

beyan edildiği bütün fonksiyonudur, bu beyanı noktasında başlamaz. Genellikle variable declaration hoisting olarak tanımlanır ve tüm değişken bildirimlerin işlev başlangıcına doğru bir hareket olarak görülebilir. İşlev tanımları için, hem bildirim hem de "görevlendirme" birlikte taşınır.

function b() { 
    a = 10; 
    function a() {} 
} 

yeni değişken a beyan anlamına gelir ve a = 10 deyimi sadece dahili değişken a değil, dış bir değiştirir

function b() { 
    var a = function() {}; 
    a = 10; 
} 

eşdeğerdir. Dahili değişkenin a dışını gölgelediğini söylüyoruz.

İkinci durumda, iç kapsamda a değişkeninin olmadığı, yani harici olanın kullanıldığı ve değiştirildiği anlamına gelir (bir değişken ararken, iç kapsamdan kapama zincirini izleyen en dıştaki birine gidersiniz) .

İlgili konular