2014-12-30 7 views
7

Öğrenme öğrenimimin bir parçası olarak, öğrendiğim konsepti göstermek için kod yazmaya çalışıyorum; bugün ben atlı değişkenleri öğreniyorum. İşte yazdığım kod şudur: Neden JavaScript sabitlenmiş yerel değişkeni tanımsız döndürüyor, ancak kaldırılan global değişken boş çıkıyor?

console.log("A: My name is " + name); 

function happy() { 
    console.log ("1: I am " + feeling); 
    var feeling = "happy"; 
    console.log ("2: I am " + feeling); 
} 
happy(); 

var name = "Jim"; 
console.log("B: My name is " + name); 

ben şu sonuçları beklenen:

A: My name is undefined 
1: I am undefined 
2: I am happy 
B: My name is Jim 

Ancak WriteCodeOnline.com de ve diğer sanal alandaki kodumu test ederken, ilk console.log görüntüler A: My name is. Bir fark yaratan bir Chrome tarayıcı kullanıyorum.

Yani, sorum şu; neden, küreselleştirilmiş global değişkeni boş olarak döndürürken, işlev içindeki kaldırılan yerel değişken tanımsız olarak geri geliyor?

+0

Başka bir soru olduğunu varolduğunu görünmüyor sorumu cevaplar. Soruma verilen cevabı bilseydim, muhtemelen başka bir soruyu da bulabilirdim. Bu sorunun kapalı olması durumunda sorunum yok. – JimLockwood

cevap

7

Burada olup bitenleri, window.name erişiminiz olmasıdır.

Bu, window numaralı telefon üzerinde önceden tanımlanmış bir özelliktir, bu nedenle kaldırılmış var name numaralı kitap aslında yeni bir değişken oluşturmamaktadır. Bu kapsamda global kapsamda zaten bir tane var ve varsayılan olarak boş bir dize değeri var.

beklediğiniz davranışı gözlemlemek için, name dışında bir değişken adı kullanın veya bir işlev içinde kodunuzu koyabilirsiniz:

function hoisting() { 
 
    console.log("A: My name is " + name); 
 

 
    function happy() { 
 
    console.log ("1: I am " + feeling); 
 
    var feeling = "happy"; 
 
    console.log ("2: I am " + feeling); 
 
    } 
 
    happy(); 
 

 
    var name = "Jim"; 
 
    console.log("B: My name is " + name); 
 
} 
 

 
hoisting();

+0

Beklentilerimin doğru olduğunu bilmek güzel. Şimdi, bu anahtar kelimelerin vb. Öğrenmeye geri dönüşü, değişken isimler olarak kullanılamaz. – JimLockwood

+2

@JimLockwood Buradaki önemli paket, tanımlayıcılarınızı global kapsam dışında tutmaktır. :) – JLRishe

+1

@RobG Pencerede '' isim '' demek istemiyor musunuz? – fgb