2017-06-29 12 views
1
var arr = []; 
    for(var i=0; i<5; i++){ 
     arr[i] = function(){ 
      return i; 
     }; 
    } 
    document.write(arr[1]()); 

出力は私がVAR、JavaScriptでループ、出力を理解することはできません、エラー

を予想通り、5ですが。 [1]私はその出力が6であるべきである期待される機能

ないARR、しかし:とforループの端部は、以下のコードのように、

var arr = []; 
    for(var i=0; i<5; i++){ 
     arr[i] = function(){ 
      return i; 
     }; 
     i++; 
    } 
    document.write(arr[1]()); 

画面がエラー、 捕捉されない例外TypeErrorを示しなぜ私は理解できません。

+0

最初のループの後に「i」が「2」になるようにします。私はいくつかのデバッグツールを使ってあなたの変数を見たり、次回に何が起こっているのかを理解するためにあなたのコードに 'console.log()'を追加することをお勧めします。 – George

+0

インデックスを2、array [0]、array [2]、array [4] ... – dloeda

+0

また、 'arr'内のすべての関数が同じ値を出力することを期待していますか?それが起こります。 – evolutionxbox

答えて

6

あなたはiため増分を持っているので、配列の割り当てられた要素は02、および4になります。要素1はスキップされます。 iforループヘッダの第三項2に再び次いで、iは、ループの終わりに1増分される0である、そして場合

最初の割り当てが起こります。次の代入は要素2の代入です。

+0

ああ私..ありがとう – jwkoo

+0

私はあなたの答えを11分後に受け入れることができます。とにかく、ありがとうございます – jwkoo

+0

また、閉鎖せずに 'arr'内のすべての関数が' 5'を出力するわけではありません。 – evolutionxbox

関連する問題