2010-11-22 17 views
1

Biliyorum, global değişkenleri kullanmayın. Ama bunları yıllar boyunca her türlü kontrol yapısı için kullandım ve bu eski zamanlardaki modüler 'nesneye itiraz ediyorum' adam için iyi çalışıyorlar.'global' dizilerle javascript kapsamı problemi

Güncel sorunum, global olarak bildirilen, daha sonra doldurulacak ve daha sonra başka bir yerden başvurulan dizilerin 'kaybolma kapsamı' ile ilgilidir.

:

<...> 
<script type="text/javascript" src="./js/arrayStuff.js"></script> 
<script type="text/javascript" src="./js/printStuff.js"></script>  
<script type="text/javascript> 

var gGlobalArray = new Array(); 

loadgGlobalArray(); 
printgGlobalArray(); 

</script> 
</head> 
<html>blah blah 
</html> 

Sonra, boyutu önceden bilinmediği çok boyutlu bir dizi yapmak için arrayStuff.js dosyasında böyle bir şey olur: Sık sık benim ana html sayfasındaki aşağıdakileri yapın dosyasında

function loadgGlobalArray() 
{ 
<...> 
gGlobalArray[rawFileIndex] = new Array(9); 
gGlobalArray[rawFileIndex][0] = currentPathIndex; 
gGlobalArray[rawFileIndex][1] = currentCtlName; 
gGlobalArray[rawFileIndex][2] = currentStepbounds; 
<...> 

printStuff, js, tamam farklı boyutlar başvurabilirsiniz: Şimdi ben çalışıyorum

<...> 
buffer += "<td>"+gGlobalArray[i][7]+</td><td>+gGlobalArray[i][8]+</td>"; 
document.getElementByID('output').innerHTML = buffer; 
<...> 

Yeni bir .js harici dosyada, ve işte beni neyin şaşırttığı. Bazen eski okul global dizilerim onlara niyet ettiğim gibi çalışır ve bazen de yapmazlar. Javascript dizilerinin gerçekten nesneler olduğunu biliyorum ve uzunluğu özelliğinin neden kullanılabilir olmayabileceğini anlayabiliyorum, ancak kicker, dizilerimin her zamanki hata ayıklama uyarılarını harici dosyalarda bıraktığım sürece tasarlandığından . Tüm uyarıları açıklarsam, iç dizi bilgileri kaybolur, uzunluk özelliği kaybolur, vb. Uyarıyı göndermiyor olsa bile diziyi doldurduğum bitin içine tek bir uyarı bildirimi koyarsam, dizinin kendisi, bilgi korunur. Niye ya?

cevap

2

Diziyi gerçekten sizin yaptığınız gibi tanımladığınız varsayılırsa, uzunluğun mevcut olmaması gerekir. Belki başka bir dosya yüklenmeden önce bir dosyaya ya da başka bir şeye atıfta bulunma gibi başka şeyler de oluyor. Uyarı, malzemelerin yüklenmesine izin veren bir duraklamaya neden olabilir.

BTW, nesne ve dizi değişmezi gösterimde içine bakmak gerekir:

gGlobalArray[rawFileIndex] = new Array(9); 
gGlobalArray[rawFileIndex][0] = currentPathIndex; 
gGlobalArray[rawFileIndex][1] = currentCtlName; 
gGlobalArray[rawFileIndex][2] = currentStepbounds; 

gGlobalArray[rawFileIndex] = [ 
currentPathIndex, currentCtlName, currentStepbounds...]; 

Çok daha kısa ve bakmak için daha kolay olabilir.

+0

yup, bu bir yarış koşuluydu ve nesne başvurulan noktada henüz mevcut değildi. Görünüm ve gerçek referans ipucu için teşekkürler! – lemo