elem
以下の両方のループで変数を宣言しました。ただし、最初のループで無名関数が呼び出されると (400ms のfadeOut
効果が終了した後)、は 2 番目のループで割り当てられelem
た値を参照しているようです。つまり、 2 番目のループで別の変数名に名前elem
を変更すると、コードは正しく機能します。elem
elem
匿名関数のコンテキストで値が変更されないように、匿名関数の周りにクロージャーを作成する方法はありますか?
for (var i = 0; i < outs.length; i++) {
var elem = this.elementAtPoint(outs[i]);
$(elem).fadeOut(400, function () {
$(elem).removeClass("white black queen"); //UPDATE
$(elem).show();
});
//$(elem).css("background", "red");
}
for (var i = 0; i < ins.length; i++) {
var elem = this.elementAtPoint(ins[i]);
var piece = this.board.pieceAt(ins[i]);
$(elem).hide();
$(elem).addClass(this.classForPiece(piece));
$(elem).fadeIn(400);
}