2011-08-06 22 views
0

私は数日前にjavascriptを起動し、関数の戻り値を出力するさまざまな方法で遊んでいました。明示的な印刷メソッド(ex。document.write)が呼び出されていないのに、関数の戻り値が印刷されるのはなぜですか?

<script> 
function produceMessage(){ 
    var msg= 'This should print'; 
    return msg; 
} 

</script> 

<span id="mySpan"></span> 

これらのコード行はどちらも、メッセージを出力するwriteまたはcreateTextNodeのようなメソッドを呼び出します。

document.body.appendChild(document.createTextNode(produceMessage())); 
document.write(produceMessage()); 

しかし、この行はそのようなメソッドを呼び出すのではなく、戻り値はまだ出力されています。

document.getElementById('mySpan').innerHTML=produceMessage(); 

私の直感が画面に表示される戻り値を持つために、あなたはこの例のように、それは印刷することができるようになる方法のいくつかの並べ替えを呼び出す必要があることを私に伝えます:

document.getElementById('mySpan').innerHTML=document.write(produceMessage()); 

これは間違っており、結果は未定義です。

+0

PS:ページの読み込み後にdocument.writeを使用しないでください。ページとその上のすべてのスクリプトが消去されるため – mplungjan

答えて

1

要素のinnerHTMLを文字列に設定すると、その要素のHTMLがその文字列に変更されます。だから、

document.getElementById('mySpan').innerHTML=produceMessage(); 
  • コールproduceMessage()
  • は、文字列を返すので、その要素のinnerHTMLプロパティをThis should printに設定されているproduceMessage

あなたの機能をもたらすために、ID mySpanを持つ要素のinnerHTMLプロパティを設定します。

あなたの次のステートメント、

document.getElementById('mySpan').innerHTML=document.write(produceMessage()); 
  • コールの戻り値にID mySpanを持つ要素のinnerHTMLプロパティを設定します
  • 文書
  • This should printを付加した結果と produceMessage()
  • コールdocument.write()は、 document.write

document.writeundefinedを返すので、その要素のinnerHTMLはundefinedの文字列表現に設定されます。

関連する問題