我已經在下面的兩個循環中聲明瞭變量elem
;但是,當第一個循環中的匿名函數被調用時(在完成400ms fadeOut
效果之後),elem
似乎指的是在第二個循環中分配的elem
的值。換句話說,如果將第二個循環中的elem
重命名爲任何其他變量名稱,則代碼正常工作。jquery回調匿名函數關閉
有沒有辦法圍繞匿名函數進行閉包,以使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);
}
沒有在JavaScript中沒有塊範圍,只有所定義的功能範圍 – 2013-05-09 03:41:49
什麼'out'?你可以用jQuery的'$ .each'循環數組和對象,這會創建一個新的作用域。 – elclanrs 2013-05-09 03:42:40
您可以瞭解更多關於JavaScript JavaScript的提示 – 2013-05-09 03:51:09