2016-11-29 181 views
2

我寫了一個簡單的代碼來從四個中選擇隨機名,使用「random_word();」功能,它不起作用。它說:「未定義」。任何人都可以解釋我爲什麼,並幫助解決它?感謝所有幫助。返回「undefined」的JavaScript函數

var randomWord; 

var word = new Array(3); 
word[0] = "Michael"; 
word[1] = "Simon"; 
word[2] = "Peter"; 
word[3] = "Mark"; 

function random_word(){ 
var randomWord = word[Math.floor(Math.random()*word.length)] 
} 

random_word(); 

document.write(randomWord); 
+0

btw,帶'3'的數組聲明沒有意義,因爲賦值有4項。 –

+0

如果您正在學習Javascript,請務必使用最近的參考資料和教程 –

回答

3

你讓randomWord與一個var語句的函數的私有變量。沒有,您可以使用全局變量作爲結果。

function random_word() { 
 
    randomWord = word[Math.floor(Math.random() * word.length)]; 
 
} 
 

 
var randomWord; 
 
    word = ["Michael", "Simon", "Peter", "Mark"]; 
 

 
random_word(); 
 
document.write(randomWord);

更好的作風和更簡潔的將是選擇的項目的回報。一個更好的版本,如果你使用數組作爲參數,也可以,因爲你也可以使用其他數組的函數。

function getRandomItem(array) { 
 
    return array[Math.floor(Math.random() * array.length)]; 
 
} 
 

 
var words = ["Michael", "Simon", "Peter", "Mark"]; 
 

 
document.write(getRandomItem(words));

獎金,以間隔添加隨機名稱。

function getRandomItem(array) { 
 
    return array[Math.floor(Math.random() * array.length)]; 
 
} 
 

 
var words = ["Michael", "Simon", "Peter", "Mark"]; 
 

 
setInterval(function() { 
 
    document.getElementById('names').innerHTML += getRandomItem(words) + '<br>'; 
 
}, 2000);
<div id="names"></div>

+0

(選項1) - 很酷。我還有一個問題。如果我把「document.write(randomWord);」寫入「write()」函數並添加「setInterval(write,2000);」在代碼結束時,它從這四個中選擇隨機單詞。但是,如果我希望每次都選擇隨機名稱(本例中每2秒),我想要做什麼? – wymyszony

+0

@wymyszony,也許獎金部分適合你。 –

+0

謝謝。或者也許:Dankeschön:) – wymyszony

0

您在函數中使用var關鍵字創建局部變量。當你退出這個功能時,全局的功能沒有設置。

使用這個代替:

function random_word(){ 
    randomWord = word[Math.floor(Math.random()*word.length)] 
} 
3

random_word功能上下文中的局部變量randomWord無關與外上下文中聲明的randomWord。如果你想重置外部變量randomWord變量的值,那麼你應該在你的函數中刪除var關鍵字。

function random_word(){ 
    randomWord = word[Math.floor(Math.random()*word.length)] 
} 

但是這不是一種好的編程方式。理想情況下,函數應該返回一個值。

function random_word(){ 
    return word[Math.floor(Math.random()*word.length)]; 
} 

var randomWord = random_word(); 
var anotherRandomWord = random_word();