クロージャーの使用方法を学ぶことで、JavaScript のスキルを適度に拡張しようとしています。以下のコードでは、console.log の出力が 3 から 0 までカウントダウンされると思っていましたが、代わりに -1、-1、-1、-1 になっています。
スコーピングの問題を扱っていることは知っていますが、それだけです。何が欠けていますか?これはどのように適切に記述する必要がありますか、またその理由は何ですか?
function closure_count_test (number)
{
for (var x = 0; x <= number; x += 1)
{
setTimeout(function() {console.log(number - x);}, x * 1000);
}
}
closure_count_test(3);