2011-07-06 71 views
2

我有几个阵列,像这样:如何将字符串数组作为参数传递给函数?

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数组,因此它会被读作个别参数?

+2

为什么不用'galImgs'参数声明函数? '函数预加载(galImgs){...}' – Nalum

回答

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。)

这具有不使用arguments伪阵列的优势,这在大多数实现中性能受到影响。

如果你想,虽然,你可以使用数组离散参数传递给preload,通过apply功能:

preload.apply(undefined, galImgs); 

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

+1

谢谢,这是非常有用的。超越和超越。干杯! –

+0

@Isaac:不用担心,很高兴帮助。最好, –

1

您正在寻找apply方法:

preload.apply(null, galImgs); 

应该这样做!

2

问题是您使用参数关键字来查找传入事件。你真正想要的是

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] 
+0

而且''arguments''上不需要'preload.'前缀。 “争论”会导致严重的表现惩罚。 :-) –

+0

@TJ是的,都是真的!希望他知道为什么它不起作用,那么我们什么是最优的。 –

+0

是的,这很有帮助;在这种情况下,它显示了我使用多少额外的代码:) –

0

没有什么可担心有将其视为一个字符串。只需向数组提供索引,您就可以获得单个字符串。

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

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

相关问题