for (var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); }, 0); } コンソールに i という変数を出力しています。 出力はどのようになりますか? これ、実行したらどのような出力になると思います? 0、1、2と答えたあなた。わたしはそんな素直なあなたが大好きです。 2、2、2と答えたあなた。素晴らしい。JavaScriptを極めてますね!ただ、不正解。ケアレスミス。 出力の答え こたえは3、3、3。不思議ですね。 さて、なぜこうなるかを解説しましょう。 罠の解説 罠の本質。クロージャとsetTimeout JavaScriptにはクロージャという仕組みがあります。簡単に言うと、変数が生きつづける仕組みです。 これとsetTimeout という処理を後から実行する仕組みのコンビネーションでこれが発生します