2011-10-08 53 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/ –