2010-11-22 11 views
1

グローバル変数は使用しないでください。しかし、私は何年もの間、あらゆる種類の制御構造にそれらを使用してきました。javascriptスコープのグローバル配列の問題

私の現在の問題は、グローバルに宣言され、後で記入され、次に別の場所から参照される配列の「消えている範囲」と関係があります。私は頻繁に私のメインのHTMLページに次の操作を行います


<...> 
<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> 

それから私は、そのサイズが事前に知られていない多次元配列を作るためにarrayStuff.jsファイルでこのようなものを持っていますファイルprintStuffで

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

、JS、私はOK異なる寸法を参照することができます。

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

今、私が働いています新しい.jsの外部ファイルには、ここで私は困惑しています。時には私の昔の学校のグローバル配列は、私が意図するように機能することがあり、時にはそうではありません。私はJavascriptの配列が実際にオブジェクトであることを知っています。なぜなら、の長さがのプロパティが利用できないかもしれない理由を理解することができますが、通常のデバッグアラートを外部ファイルに残す限り。すべてのアラートをコメントアウトすると、内部の配列情報が消え、長さのプロパティが消えます。アラートが参照されていない場合でも、配列に記入するビットに1つのアラート文を入れれば配列自体、情報が保持されます。どうして?

答えて

2

実際に配列を定義したと仮定して、長さを使用できないようにする理由もありません。他のファイルがロードされる前にファイルで参照するなど、何か他のことが起こっている可能性があります。アラートによって、一時停止が発生していることが原因で負荷がかかっている可能性があります。

ところで、あなたは、オブジェクトや配列リテラル表記になります。

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

を見に

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

はるかに短くて簡単である可能性があります。

+0

ええ、それは競合状態であり、オブジェクトは参照された時点でまだ存在しませんでした。ルックとリテラル参照のおかげで、ありがとう! – lemo