2014-04-06 206 views
0

我想要做的是將某個函數中指定的變量設置爲某些內容,如果該內容沒有意義,請參閱下面的內容。在函數參數中使用變量

function getRandomFromArray(arrayName,storeVariable) 
{ 
storeVariable = arrayName[Math.floor(Math.random() * arrayName.length)] 
} 

var petTypeArray = ['Cat','Dog','Ferret','Spider','Companion Bot']; 

getRandomFromArray(petTypeArray,petType) 

例如,將petType設置爲petTypeArray中的隨機字符串。我做對了嗎?我能像這樣做嗎?

+3

爲什麼不使用常規的返回值和變量賦值? – Sirko

回答

2

您可以使用函數的返回值:

function getRandomFromArray(arrayName) { 
    return Math.floor(Math.random() * arrayName.length); 
} 

var petTypeArray = ['Cat', 'Dog', 'Ferret', 'Spider', 'Companion Bot']; 
var randomElement = getRandomFromArray(petTypeArray); 

這使得代碼更易讀。修改函數內的參數值是可能的,但它不適用於基本類型,如字符串和整數。您只能修改某些複雜對象的屬性。

+0

感謝堆。真的應該想到這一點。 – coolcat99games

1

不,你沒有正確地做。原因是,變量只是對數據的引用。它們本身並不意味着什麼。所以,當你說

storeVariable = Math.floor(Math.random() * arrayName.length) 

你正在使storeVariable引用一個新值。而已。您沒有對storeVariable進行更改。這就是爲什麼它不起作用。相反,你可以從函數返回值這樣

function getRandomFromArray(arrayName) 
{ 
    return arrayName[Math.floor(Math.random() * arrayName.length)]; 
} 

,並提出一些其他變量是指返回的數據,這樣

var randomData = getRandomFromArray(myArray); 
1

在JavaScript中,所有參數是按值傳遞。

這意味着storeVariable會收到您呼叫的值的COPY。本地副本可以更改,但不能影響原始副本。

(是的,所有的參數都是按值傳遞的。對於那些即將downvote我,對象是按值傳遞。該值恰好是原始對象的引用。)