どうしてこのsetTimeoutのコードが同じ値ばかり出力していますか


このコードを実行してみたら、不思議な結果がでました

[code]

    function printFive() {
        for (var i = 0; i < 5; i++) {
            setTimeout(function () {
                console.log(i);
            }, i * 1000);
        }
    }
    
    printFive();
    
[/code]

こうすれば、

[code]

    0
    1
    2
    3
    4
    
[/code]

がゆっくり出力されると思うと、実際は

[code]

    5
    5
    5
    5
    5
    
[/code]

がでました。

[jsfiddle](http://jsfiddle.net/964boo4x/)

どうして`0`から`4`までループしているのに、`5`ばかりが出てくるんですか。どうすれば思い通りになりますか。




See
[for文でclick時の動作を定義したい](https://ja.stackoverflow.com/questions/1534/for%E6%96%87%E3%81%A7click%E6%99%82%E3%81%AE%E5%8B%95%E4%BD%9C%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%81%84/1616#1616)

これと同じ回答になります。  
for 文内で即時関数を用いて値を束縛する必要があります。 詳しくはこちらをご覧ください。

<http://mattn.kaoriya.net/software/lang/javascript/20110523124612.htm>

