2016-04-27 11 views
-7

誰かが私のためにこのスクリプトを分解して、結果がどのように30105であるか教えてください。みんなJavaScript関数(数学演算)の間違った結果

function one(numOneIn) { 

two(numOneIn * 3); //1x3 

document.write (numOneIn); //3 

} 

function two(aNumberIn) { 

document.write (aNumberIn); //1 

} 

function three(numIn) { 

one(numIn * 2); 

document.write (numIn); 

} 

three(5); 
+0

としてそれを書き換えdocument.write (numOneIn);のそれは実際には "30" + "10" + "5" これらの数字は私かかわらから来るのか – Redu

+0

ですスタックオーバーフローはプロと熱心なプログラマを対象としているので、JavaScriptのチュートリアルを検索して言語を最初に学ぶ方がよいでしょう。 – jonathonhub

+0

@jonathonhubすべてのプログラマーがいつものように騒がしいということは残念ではありませんが、SOユーザーがコードの読み方を知っていることが一般的に予想されます。 – zzzzBov

答えて

0

たくさんのおかげでここのは、それがどのように実行するかを見てみましょうあなたは

1. function one(numOneIn) { 
2.  two(numOneIn * 3); 
3.  document.write(numOneIn); 
4. } 
5. function two(aNumberIn) { 
6.  document.write(aNumberIn); 
7. } 
8. function three(numIn) { 
9.  one(numIn * 2); 
10.  document.write(numIn); 
11. } 
12. three(5); 

を掲載しましたコードの合理的にフォーマットされたバージョンです。

最初の数グループ(1-4,5-7,8-10)はfunctionの定義です。呼び出されるまで実行されません。

実行する最初の行はthree(5)(12行目)です。

それはnumInパラメータに5の値を通る線8three関数を呼び出します。

実行する次の行は、one(numIn * 2)(9行目)です。

関数は、1のパラメータに10(5 * 2)の値を渡します。

実行する次の行は、two(numOneIn * 3)(2行目)です。

5two関数は、パラメータに30(10 * 3)の値を渡します。

実行する次の行は、aNumberInが文字列にキャストされるため、'30'をDOMに追加するdocument.write(aNumberIn)(行6)です。

行7は、twoの呼び出しを終了します。

実行する次の行はdocument.write(numOneIn)(行3)で、が文字列にキャストされるため、'10'がDOMに追加されます。

行4は、oneの呼び出しを終了します。

次の行はdocument.write(numIn)(行10)で、numInが文字列にキャストされているため、'5'がDOMに追加されます。

行11は、threeの呼び出しを終了します。

スクリプトの実行が終了しました。

DOMの最終的な状態は、'30105'の文字列です。

2

3、次いで(5)

コール、数5を渡し:

一方(numIn * 2)。

コール通過、次いで5×2 => 10、:

2つ(numOneIn * 3)

コール通過、10×3 => 30、then

2つのは、文字列として "30"を文書に書き込みます。

コントロールはに戻ります。は、(10)に渡された値を文字列として書き込みます。

コントロールは、の3つのに戻り、それは文字列としてit(5)に渡された値を書き込みます。

したがって、最後の文字列は「30105」です。

0

two()は、任意のフォーマッタなし5

document.write()を書き込ん30

one()は10

three()を書き込み、書き込み、右カーソルが最後に残っていた場所の後にページ上/書き込みを描画します。

document.write()に何らかの書式を追加すると、わかりやすくなります。

はEG

document.write()に接頭辞や接尾辞 <br/>してください:代わりに document.write ("<br/>"+numOneIn);