2016-11-29 142 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();