От известно време не съм сигурен относно правилата на JS събирането на боклука около затварянето, така че смятам, че може и да попитам... Ето един добър пример, за който съм любопитен относно включването на метода $.each
на jQuery:
storeSelection: function() {
var enabledIds = {};
$.each(this.nodes, function(index, node) {
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
this.selection = enabledIds;
}
Горният фрагмент е, разбира се, част от обектен литерал. И така, създадох нов обект в горната част на външната функция, който ще съхранява идентификаторите на разрешените елементи в масив. Използвайки метода .each()
на jQuery, преминавам през масива от елементи и регистрирам активирани идентификатори. И накрая, съхранявам селекцията като член на родителския обект.
Въпросът ми включва тази вътрешна функция, която препраща към enabledIds
обекта от външния обхват. Тъй като enabledIds
ще остане, това пречи ли на вътрешната функция да бъде събрана? Бих предположил, че не, защото това е просто променлива, която се изчиства в края на вътрешната функция, нали? За да стане изтичане, предполагам, че вътрешната функция ще трябва да направи твърда препратка към външния обект, както в:
$.each(this.nodes, function(index, node) {
this.badIdea = enabledIds;
if (node.enabled) {
enabledIds[ node.id ] = true;
}
});
Обаче... това правило винаги ми е мъгливо. Всяка помощ за изясняване на това объркване ще бъде оценена!