2017-11-18 24 views
2

これは基本的なJSですが、簡単な説明をしたいと思います。私が読んだことから、ループの外側に空の変数があると宣言すれば、ループ内の変数はグローバルにアクセスできるはずです。または私は完全に間違っていますか?外部変数からのアクセス変数

私はforループ外からrandAdにアクセスしたいと思います。

var mobileAds = [ 
    "mobile/bb.jpg", 
    "mobile/eyeko.jpg", 
    "mobile/farfetch.jpg", 
    "mobile/fsb.jpg" 
]; 

var randNum = (Math.floor(Math.random() * mobileAds.length)); 
var randAd; 

var i; 
for (i = 0; i < mobileAds.length; ++i) { 
    randAd = (mobileAds[randNum]); 
} 
+0

Duh。ありがとう@adada –

+0

あなたが受け入れたとマークした答えは、同じ「広告」が4回繰り返された配列を作成します。 'randAd'に配列または単一の文字列変数を作成しようとしましたか? – adiga

答えて

2

あなたはforループの外側randAdのすべての要素にアクセスする場合は、配列として、それを初期化するために、このvar randAd = [];ようにしてみてください。 forループの後で簡単にアクセスできますが、単純な変数var randAd;として使用すると、最後の変数は常に(上書きされます)取得されます。したがって、配列として初期化し、すべての要素をループ内にプッシュしてから出力してください。

var mobileAds = [ 
 
     "mobile/bb.jpg", 
 
     "mobile/eyeko.jpg", 
 
     "mobile/farfetch.jpg", 
 
     "mobile/fsb.jpg" 
 
    ]; 
 
    
 
    var randNum = (Math.floor(Math.random() * mobileAds.length)); 
 
    var randAd = []; // see the change here 
 
    
 
    var i; 
 
    for (i = 0; i < mobileAds.length; ++i) { 
 
     randAd.push(mobileAds[randNum]); // push every element here 
 
    } 
 
    console.log(randAd);

+0

ありがとう! 'push'は'配列 'を格納するときに意味があります。しかし、もともと私は、単に関数の外部から単純な変数にアクセスしようとしていました。その場合、私のコードは正しいですか? –

+0

うん、それはよさそうだ。 –

2

あなたはそれが空の配列[]として初期化してからループrandAd.push()内から、その配列にプッシュするべきであるrandAdを使用したい場合。このように:

var randAd=[]; 

var i; 
for (i = 0; i < mobileAds.length; ++i) { 
    randAd.push(mobileAds[randNum]); 
} 
1

あなたは考えすぎです。あなたは0と配列の長さの間の乱数を得るのに苦労しました。だから、ただそのインデックスでadを得る:

var randAd = mobileAds[randNum]; 

不要の​​全くforループを使用します。

関連する問題