jsfiddle を参照してください: http://jsfiddle.net/LsNCa/2/
function MyFunc() {
for (var i = 0; i < 2; i++) { // i= 0, 1
var myDiv = $('<div>');
myDiv.click(function(e) {
alert(i); // both the two divs alert "2", not 0 and 1 as I expected
});
$('body').append(myDiv);
}
}
var myFunc = new MyFunc();
divをクリックすると、それぞれ「0」と「1」をアラートするようにしたいのですが、どちらも「2」をアラートします。
div をクリックしてイベントがトリガーされると、ハンドラーは変数の値をどこでどのように見つけますi
か?
クロージャーを追加すると目標が達成されることを認識しています。しかし、なぜ?