Взяв вопрос всерьез, мы должны выяснить, что типичный 6-летний человек способен когнитивно, хотя, по общему признанию, тот, кто интересуется JavaScript, не так типичен.
В Развитие детства: от 5 до 7 лет говорится:
Ваш ребенок сможет следовать двухэтапным направлениям. Например, если вы скажете своему ребенку: «Идите на кухню и достаньте мешок для мусора», они смогут запомнить это направление.
blockquote>Мы можем использовать этот пример, чтобы объяснить закрытие , следующим образом:
Кухня - это замыкание, которое имеет локальную переменную, называемую
blockquote>trashBags
. Существует функция внутри кухни под названиемgetTrashBag
, которая получает один мусорный мешок и возвращает его.Мы можем закодировать это в JavaScript следующим образом:
function makeKitchen () { var trashBags = ['A', 'B', 'C']; // only 3 at first return { getTrashBag: function() { return trashBags.pop(); } }; } var kitchen = makeKitchen(); kitchen.getTrashBag(); // returns trash bag C kitchen.getTrashBag(); // returns trash bag B kitchen.getTrashBag(); // returns trash bag A
Другие моменты, которые объясняют, почему замыкания интересны:
- Каждый раз, когда вызывается
makeKitchen()
, создается новое замыкание со своим отдельнымtrashBags
.trashBags
является локальной для каждой кухни и недоступна снаружи, но внутренняя функция в свойствеgetTrashBag
имеет к ней доступ.- Каждый вызов функции создает замыкание, но не нужно будет закрывать его, если внутренняя функция, которая имеет доступ к внутренней части замыкания, может быть вызвана из-за закрытия. Возвращение объекта с помощью функции
getTrashBag
делает это здесь.