Я немного запутался с тем, как закрытие работ по этому коду:Закрытие на объекте
function Spy(target, method) {
var result = {count: 0},
oldFn = target[method];
target[method] = function(input) {
result.count++;
return oldFn.apply(target, arguments);
}
return result;
}
Итак, когда вы задаете этот переменной как
var logSpy = Spy(console, 'log')
logSpy объект с свойство count. Если вы должны были вызвать console.log, перезаписанная функция увеличивала бы значение result.count, но результат, к которому он обращается, вложен, правильно? Итак, как создается связь между вложенным объектом и глобальным объектом logSpy? Я предполагаю, что объект logSpy ссылается на закрытый объект, потому что объекты передаются переменным по ссылке? Так что logSpy как объект технически не существует в глобальном контексте выполнения, а является просто ссылкой на закрытие?
Я думаю, что это правильно - определение функции внутри замыкания дает этой функции доступ ко всем переменным в этом закрытии. Я могу только говорить по опыту, однако, я не знаю внутренней работы JS. –
«В JavaScript сам объект функции содержит недопустимое свойство, указывающее на объект, содержащий переменные из его области объявления». [Ссылка] (https://lostechies.com/derekgreer/2012/02/17/javascript-closures-explained/) – xersiee