从循环外部访问变量

7

我知道这是基本的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]);
}

嘿,谢谢@adiga。 - Scott Brown
你标记为接受的答案创建了一个包含相同 ad 重复4次的数组。你是想要创建一个数组还是单个字符串变量在 randAd 中? - adiga
3个回答

8
如果你想在 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);


谢谢!当存储一个数组时,“push”有意义。但最初我只是试图从“函数”外部访问一个简单的变量。在那种情况下,我的代码是否正确? - Scott Brown
是的,看起来没问题。 - A l w a y s S u n n y

3

您想太多了。您已经完成了随机获取0到数组长度之间的数字这个难点。所以,只需获取该索引处的ad:

var randAd = mobileAds[randNum];

完全不需要使用 for 循环。


2

如果您想使用randAd,应将其初始化为空数组[],然后从循环内部将其推入该数组中randAd.push()。就像这样:

var randAd=[];

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接