如何将一个字符串数组作为参数传递给函数?

时间:2011-07-06 15:14:52

标签: javascript arrays string

我有几个数组,如下:

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数组,以便将其作为单独的参数读取?

4 个答案:

答案 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)

您正在寻找apply方法:

preload.apply(null, galImgs);

应该这样做!

答案 3 :(得分:0)

将其视为单个字符串无需担心。只需为您的数组提供索引,您就可以获得单个字符串。

galImgs [0]会返回字符串“http://domain.tld/gallery/image-001.jpg”

你可以使用gallmgs是一个数组对象,你可以拥有一个数组的所有访问器。尝试使用gallmgs.length。