我对这段代码中闭包的工作原理感到有些困惑:
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是一个带有计数属性的对象。如果您调用console.log,重写的函数将增加result.count值,但它所访问的结果是封闭的,对吗?那么封闭对象和全局logSpy对象之间如何建立联系呢?我猜logSpy对象是引用封闭对象,因为对象通过引用传递给变量?那么作为对象的logSpy在全局执行上下文中技术上不存在,而只是对闭包的引用?