Доброго времени суток.
Столкнулся с непонятным поведением jQuery.
Есть некоторая переменная, которая объявлена, но не проинициализирована в момент объявления.
Далее следует jQuery код, внутри которого с этой переменной происходят различные преобразования.
Однако, вне блока jQuery, эти изменения странным образом теряются.
Код:
function galleryHelper(){
self.galleryID="works-gallery";
this.self = this;
self.rowClass = "line-works-gallery";
this.createRow = function(){
var row; // Момент инициализации
jQuery(function($){
row = $(document.createElement('div')); // Что-то с этой переменной делаем
row.addClass(self.rowClass);
$(row).appendTo("#"+galleryID);
row = $(row).get(0);
});
console.log(row); // undefined
return row;
}
}
Я пробовал различные варианты:
function galleryHelper(){
self.galleryID="works-gallery";
this.self = this;
self.rowClass = "line-works-gallery";
this.createRow = function(){
var row = jQuery(function($){
row = $(document.createElement('div'));
row.addClass(self.rowClass);
$(row).appendTo("#"+galleryID);
row = $(row).get(0);
});
console.log(row); // document
return row;
}
}
И такое тоже находил на SO:
function galleryHelper(){
self.galleryID="works-gallery";
this.self = this;
self.rowClass = "line-works-gallery";
this.createRow = function(){
var row; // Момент инициализации
jQuery(function($){
row = $(document.createElement('div')); // Что-то с этой переменной делаем
row.addClass(self.rowClass);
$(row).appendTo("#"+galleryID);
row = $(row).html();
});
console.log(row); // undefined
return row;
}
}
Однако, чтобы ни происходило с row внутри jQuery блока - несмотря на то, что объявлена переменная во внешней области видимости (по отношению к jQuery блоку), эти изменения с ней не происходят.
Я понимаю, что, скорее всего, есть некоторый хитрый и интересный механизм, на основе которого либо работает jQuery, либо он этот механизм и реализует в самом себе.
Очень хотелось бы разобраться в таком загадочном поведении, заранее благодарю за ваши ответы.