2016-04-16 15 views
0

私は吊り上げに頭を抱えようとしています。私はコードスクールのチュートリアル(es2015)を行っています。 (彼らはコードの部分だけを表示するので、以下は私のバージョンである) 吊り下げによるJavaScriptが得られないのはなぜですか

function _myfunc(callback){ 
    callback(); 
} 

function display(names){ 
    for(var i in names){ 
    _mfunc(function(){ 
     console.log(names[i]); 
    }); 
    } 
} 
display(["Sam", "Tyler", "brook", "alex"]); 

はどうやら var iforループの上に掲揚され、そしてどのような私がコンソールに表示されるはずは alexを4回慰めです。しかし、私は4つの名前すべてが慰められているのを見る。 (その後、 varではなく、を使用して動作させることになっていますが、動作させる前にブレーキをかけてください)

コードを修正してブレーキをかけて、望ましい結果。あなたのコードを破るための一つの方法だろう

答えて

1

setTimeoutに渡されたコールバック関数は、ループが完了した後に を実行するようにスケジュールされていることである、ここで何が起こる
function display(names){ 
    for(var i in names){ 
    setTimeout(function() { 
     console.log(names[i]); 
    }, 0); 
    } 
} 
display(["Sam", "Tyler", "brook", "alex"]); 

。そして、ループの最後に3の値を持つi変数をすべて取得すると、すべて同じ結果が出力されます。

PS:for-inを使用して配列を繰り返し処理することをお勧めしますが、通常はforにカウンタを使用してください。

+0

ありがとうございました。 – relidon

+0

@relidonほぼ - 通常の*増加*カウンタ: 'のために(for i = name.length - 1; i> = 0; i - )を意味します。 var i = 0; i zerkms

関連する問題