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

How can I pass an array of strings to a function as arguments?

本文关键字:参数传递 函数 数组 字符串      更新时间:2023-09-26

我有几个数组,如下所示:

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

但是,调用

preload(galImgs);

作为单个字符串而不是逗号分隔的字符串在数组中传递。

不,它在数组中传递,而不是字符串。实际上,您在preload函数中遇到了太多麻烦,只需使用给定的数组:

function preload(a) {
    for (i = 0; i < a.length; i++) {
        preloadImgs[i] = new Image();
        preloadImgs[i].src = a[i];
    }
}

(在函数中声明i变量,我在上面没有添加;事实上,你正成为隐式全局变量恐怖的牺牲品。(

这样做的优点是不使用arguments伪数组,这对大多数实现来说都是一个性能打击。

不过,如果您愿意,可以使用数组通过apply函数将离散参数传递给preload

preload.apply(undefined, galImgs);

第一个参数用于函数中的this,您可以只使用undefined作为默认值;第二个参数是数组,它将在函数中显示为离散参数。

问题是您使用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]

您正在寻找应用方法:

preload.apply(null, galImgs);

应该这么做!

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

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

您可以使用gallmgs。它是一个数组对象,并且您将在其中拥有数组的所有访问器。尝试gallmgs.length.