2016-03-20 5 views
0
<html> 
<head> 
</head> 
<body> 
<p id="test"> </p> 
<script> 

function numbers() { 
    var qwe, 
    zxc = - Infinity; 
    // arguments.length == 4 , right? 
    for (qwe = 0; qwe < arguments.length; qwe++) {   
    if (arguments[qwe] > zxc) { 
     // If arguments[qwe] which is equalto11isgreaterthan - Infinity--TRUE, right ? 
     zxc = arguments[qwe]; // why does the output become 25 ? 
    } 
    } 
    return zxc; // is it because of this ? 
} 
document.getElementById('test').innerHTML = numbers(13, 10, 25, 11); 

</script> 
</body> 
</html> 

出力が25になるのはなぜですか?Js関数のパラメータ(数値のリストの中で最も高い値)

+3

期待される出力は何ですか? –

+1

これは 'numbers()'に渡される引数のうち最高のものであるため、25を返します...あなたのコードはパラメータを反復して最高の値を選択します。 – Ding

+0

私は何か不足しているかもしれませんが、この関数は渡された各数値をzxcと比較せず、値がzxcの既存の値よりも大きいzxc fのみを修正します。 11が25よりも大きくないので、zxcの値は25であり、cosは最高の値ですか? – gavgrif

答えて

2

4つの引数(13、10、25、11)を送信したため、Arguments.lengthは4になります。 forループは4つの引数を繰り返し処理し、引数[qwe]を見つけます。のは、それを打破してみましょう:ループ、QWE = 0とZXC =用を通じて

  1. 初めて - インフィニティので、if文がtrueに評価された(引数[0] = 13、および13> - インフィニティ) 。 ifステートメントはtrueと評価されるので、今度はifステートメント内のロジックを評価するので、zxcは等しい引数[0]、すなわち13に設定されます。
  2. forループの次のラウンドでは、qweが1、zxcはまだ13、引数は[qwe] = 10(次の引数)です。さて、引数[qwe] = 10はzxc(13)より大きくないので、if文は偽であり、if文内の論理は評価されません。
  3. forループの次の反復では、qwe = 2、zxcはまだ13、引数[qwe] = 25(次の反復)です。さて、引数[qwe] = 25はzxc(13)よりも大きいので、if文は真です。 ifステートメントはtrueと評価されるため、ifステートメント内のロジックを評価し、zxcは等しい引数[2]、つまり25に設定されます。
  4. forループの次の最後の繰り返しでは、qwe = 3 、引数[qwe] = 11、およびzxc = 25です。引数[qwe] = 11は25より大きくないため、if文はfalseと評価され、if文内のロジックは評価されません。

ここで、qwe =引数の長さなので、forループは終了します。 forループが終了すると、zxcが返されます。この時点では25です。

+0

ループの段階的な説明。+1 –

+0

ありがとう@MicahWilliamson :) –

+0

if文が真であれば、各繰り返しの評価後にzxcの値が変化します:) – mixsensei

0

このループで返すのは、関数の引数として渡される最大の数です。引数として渡した番号を調べてみてください:13, 10, 25, 11

あなたのループはこれらの渡された整数を通過し、それらを比較しています。最初のインデックス(この場合は13)が負の無限大と比較されています。値が大きいので、変数zxcが書き換えられます(これは、現在のインデックスが前のインデックスよりも大きくなるたびに発生します)。あなたの場合、25を引数リストの中で最大の整数とすると、それは関数から返される最終値です。

テストするには、11を29に変更して何が起こるかを確認してください。 25はもはや最大の番号ではなく、#test要素に書き込まれません。

関連する問題