Javascript'in olay işleyici yönüne takılıyorum.Javascript: Özel bir nesne yöntemini olay dinleyicisine bağlama
rowCells [j], benzersiz bir nesneye yapılan başvurudır. galleryCell ayrıca yeni oluşturulan nesneye de bir başvuru. İkisinin birbirine bağlanması gerekçesiyle duruyor. Bununla birlikte, olay dinleyicisinin düzgün çalışması için iki referansın bir araya geldiği görülmemektedir. Tüm hücreler aynı kesin şeylere atanır (son galleryCell nesnesi).
GaleriCell değişkeni, her yinelemede yeni bir başvuru almak için bir döngü içinde yer alır. Bu referanslar neden kaybediliyor?
function TypeGallery (galleryObj)
{ //receives the <div> element that contains rows and cells of a gallery
//Properties --------------
var galleryCellArr = []; //array of galleryZoomCell objects
//Methods -----------------
var Initialize = function()
{
var rows = galleryObj.children;
var rowCount = rows.length;
for (var i=0;i<rowCount;i++)
{
var rowCells = rows[i].children;
var rowCellCount = rowCells.length;
for (var j=0;j<rowCellCount;j++)
{
var sliderObj = new TypeSlider(300,1,false);
var galleryCell = new TypeGalleryZoomCell(rowCells[j],sliderObj)
galleryCellArr.push(galleryCell);
rowCells[j].onmousedown = function() {galleryCell.Deploy();};
rowCells[j].onmouseup = function() {galleryCell.Retract();};
}
}
}
//Initialization
Initialize();
}
galleryCell değişkeni, bloğa değil, tüm Initialize işlevine kadar genişletilir. Bu nedenle, her yinelemeyle tamamen yeniden yazılır ve olay tetiklendiğinde, çağrılan işlev yalnızca galleryCell için en yeni ödevdir. Http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example – TAGraves