2016-11-29 36 views
2

"random_word();"を使用して、4つの中からランダムな名前を選択する簡単なコードを書きました。それは機能しません。それは言う:「未定義」。誰も私を説明して、それを修正するのを手助けすることはできますか?すべての助けに感謝します。"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

あなたはvar文を使用して、機能のプライベート変数にrandomWordを作ります。そうしなければ、結果にグローバル変数を使うことができます。

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);"を追加します。コードの最後には、この4つの単語からランダムな単語が選択されます。しかし、毎回(この場合は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(); 
関連する問題