2011-10-08 56 views
1

我失去了这个错误。我正在尝试编写一个函数并在该函数中写入一个数组。在外部的js文件中。这将是一个随机的图像加载功能,但我不断收到一个错误与阵列并不能找出原因。阵列语法错误新手

function randImg(){ 
    var imgs = new Array(); 
    img[0]="banner1.png"; 
    img[1]="banner2.png"; 
    img[2]="banner3.png"; 
    var maxium = img.length; 
} 

我得到了var imgs行上的错误。有任何想法吗?

这是我的新代码调用变量“IMG”被扔我了,它加载确定,但只打印出来的文字的变量,而不是实际的文件!?所以在运行时会说“banner1.png”或“banner3.png”?任何想法

function randImg(){ 
var banner = new Array(); 
banner[0] = "banner1.png"; 
banner[1] = "banner2.png"; 
banner[2] = "banner3.png"; 
var maxImg = banner.length; 
var randNum = Math.floor(Math.random()*maxImg); 
return banner[randNum]; 
} 
+3

我没有看到一个'无功img'在那里的任何地方。 –

+0

我要指出,我只得到这个错误在外部JS文件,但如果在内部使用它,我没有错误 – Overcranked

回答

3

一个更好的办法,其元素来定义数组:

var img = [ 
     "banner1.png", 
     "banner2.png", 
     "banner3.png", 
     "banner4.png" 
] 

这是你需要的功能:

function randImg(){ 
    var img = [ 
      "banner1.png", 
      "banner2.png", 
      "banner3.png", 
      "banner4.png" 
    ] 
    var maxImg = img.length; 
    var randNum = Math.floor(Math.random()*maxImg) 
    return img[randNum] 
} 
2

你的变量名应该是一致的。您创建的新阵列IMGS(局部变量),但你加入到IMG(默认为全局变量,因为你没有把它声明一个局部变量)。

另外请注意,在Javascript中它没有太大的意义添加var语句不是一个函数的第一行。这是因为吊装。从本质上讲,使用Javascript将您var,并将其移动到第一行中,变量设置为undefine。这可能会也可能不会影响你的程序是如何工作的VS是怎么想它应该工作,所以最好在你的函数的顶部添加所有var秒。 Javascript具有功能范围,而不是范围范围。

(也注意到maximum是一个更有意义的变量名比maxium

// This adds to the newly created array: 
function randImg(){ 
    var img = new Array(), // Note: img NOT imgs 
     maximum; // Even if a var is below this line, Javascript hoists it here 
    img[0] = "banner1.png"; 
    img[1] = "banner2.png"; 
    img[2] = "banner3.png"; 
    maximum = img.length; 
} 

,你可以使用.push()如果你只是增加了一个数组的结尾(就像你正在做的)

function randImg(){ 
    var img = new Array(), // Note: img NOT imgs 
     maximum; 
    img.push("banner1.png"); 
    img.push("banner2.png"); 
    img.push("banner3.png"); 
    maximum = img.length; 
} 

function randImg(){ 
    var img = new Array(), // Note: img NOT imgs 
     maximum; 
    img.push("banner1.png").push("banner2.png").push("banner3.png)"; 
    maximum = img.length; 
} 

或为tter然而,只要使用[]初始化为空数组或[a,b,c,...]来初始化元素的数组。另外,为什么使用var两次?

function randImg(){ 
    var img = ["banner1.png","banner2.png","banner3.png"], // note comma 
     maximum = img.length; 
} 

最后,为了不辜负名称的功能

var randImg = function() { 
    var img = ["banner1.png","banner2.png","banner3.png"]; 
    return img[Math.floor(Math.random()*img.length)]; 
} 

... and here's a working example of randImg()

+0

有你文本分配给一个变量,而不是一个正常的函数定义函数的原因吗? – icktoofay

+0

@icktoofay - 因为我不知道在哪里OP想要使用的功能,它是更加灵活。函数声明在非函数块(如if)中被正式禁止。但是,所有浏览器都允许它们以不同的方式解释它们。 –

+0

http://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/ –