2016-03-27 27 views
1

JavaScript kaldırma işlemini anlamaya çalışıyordum ve anladığım kadarıyla, kodun yürütülmesinden önce tüm değişken bildirimler için bellek alanı ayrılmıştır.JavaScript aynı değişkenin birden çok bildirimi için kaldırma

Tercümanın, aynı değişken için birden fazla bildirimde bulunması durumunda nasıl çalıştığını anlamak isterim. Aşağıdaki kodu düşünün:

console.log(a); 

//first declaration 
function a() { 
    console.log('hello'); 
} 

//second declaration 
var a = 2; 

çıkış fonksiyonu beyanıdır:

function a() { 
    console.log('hello'); 
} 

Yani, tercüman karşılaşır ilk deklarasyonu varsayıyorum hafızada saklanır biridir. Ancak, hiç beyanname sırasını değiştirerek: Aynı çıktı

console.log(a); 

//first declaration 
var a = 2; 

//second declaration 
function a() { 
    console.log('hello'); 
} 

sonuçlar! Tercüman ilk bildirimi yok sayar ve ikinci beyanı hafızaya kaydeder. Bu neden oluyor? İkinci durumda çıkış undefined olmalıdır?

function a() { 
    console.log('hello'); 
} 
var a; 
console.log(a); 
a = 2; 

nedenle yukarıdaki kod yürütülürken, a, başlangıçta fonksiyonunu atıfta ve bu var a; çizgi çalıştırılacaktır sonra olacak a orada tanımsız Kodunuz aşağıdaki gibi yorumlayıcı tarafından okunacak

cevap

1

olduğu beri Atanan bir değer, bir değişken beyanı ile undefined ile belirlenmeyecektir. Bu nedenle, bu satır göz ardı edildi ve işlev referansının primitive değerini yazdırdı.

olacağını daha iyi anlamak için basit bir örnek

,

onlar tanımsız bir zaten atanmış değeri çalışıyorsanız
+0

böylece müteakip birden beyanlar dikkate alınmaz

function x(){ }; var x; console.log(x); //function x(){ } 
? –

+0

@TarunDugar Evet, tam olarak. Önceden belirlenmiş değerler, bir değişken bildirimi ile tanımsız olarak değiştirilmez. –

+0

Tamam, anladım! Teşekkürler. –

İlgili konular