Работя върху библиотека на Javascript, където не мога да замърсявам глобалното пространство от имена и трябва да съдържа всички мои променливи в една или две глобални променливи. В момента се натъкнах на специален случай, в който трябва да използвам затваряния, но това, което обикновено опитвам, не работи и ме притеснява от известно време. Търсенето ми даде само традиционния метод на затваряне, който обикновено използвам.
[...]
addFilters: function(filters) {
for(filter in filters) {
this.filters[filter] = filters[filter];
this.Image.prototype[filter] = function() { //closures, how do they work?
return (function(image, filter, arguments) {
image.addQueue(filter, arguments);
})(this, filter, arguments);
};
}
},
[...]
В горния фрагмент функциите Image.prototype (и image.addQueue) не улавят правилно „филтъра“ и затова се настройва на последния филтър в итерацията for..in всеки път.
Пълен код тук с подчертани подходящи секции: http://pastebin.com/UVFTVPkh
Демо на живо: http://ian0.com/code/js/ube/demo.html