我有几个数组,如下:
var galImgs = ["http://domain.tld/gallery/image-001.jpg",
"http://domain.tld/gallery/image-002.jpg",
"http://domain.tld/gallery/image-003.jpg"],
preloadImgs = [];
我想使用一个简单的for
循环来加载galImgs
数组中的值的图像,如下所示:
function preload() {
for (i = 0; i < preload.arguments.length; i++) {
preloadImgs[i] = new Image();
preloadImgs[i].src = preload.arguments[i];
}
}
但是,请致电
preload(galImgs);
将数组作为单个字符串传递,而不是以逗号分隔的字符串传递。如何传递galImgs
数组,以便将其作为单独的参数读取?
答案 0 :(得分:4)
但是,请致电
preload(galImgs);
将数组作为单个字符串传递,而不是以逗号分隔的字符串传递。
不,它传入数组,而不是字符串。你实际上在preload
函数中遇到了太多麻烦,只需使用你给出的数组:
function preload(a) {
for (i = 0; i < a.length; i++) {
preloadImgs[i] = new Image();
preloadImgs[i].src = a[i];
}
}
(并且在函数中声明了i
变量,我上面没有添加;事实上,你正在成为The Horror of Implicit Globals的牺牲品。)< / p>
这样做的好处是不使用arguments
伪数组,这在大多数实现中都会受到性能影响。
但是,如果您愿意,可以使用数组通过preload
函数将离散参数传递给apply
:
preload.apply(undefined, galImgs);
第一个参数用于函数中的this
,您可以使用undefined
作为默认值;第二个参数是数组,它将在函数中显示为离散参数。
答案 1 :(得分:2)
问题是你使用arguments关键字来查找传入的事件。你真正想要的是
function preload(images) {
for (i = 0; i < images.length; i++) {
preloadImgs[i] = new Image();
preloadImgs[i].src = images[i];
}
}
为了帮助您更好地理解,除了一件事之外,您的旧方式很好......
preload.arguments.length == 1
preload.arguments[0] == galImgs
preload.arguments[0][0] == galImgs[0]
答案 2 :(得分:1)
答案 3 :(得分:0)
将其视为单个字符串无需担心。只需为您的数组提供索引,您就可以获得单个字符串。
galImgs [0]会返回字符串“http://domain.tld/gallery/image-001.jpg”
你可以使用gallmgs是一个数组对象,你可以拥有一个数组的所有访问器。尝试使用gallmgs.length。