可以在周六下午的对象组成/关闭调查中使用一些反馈(它是否准确,是否缺少任何关键点,非关键点,您能否帮助回答剩余的问题/提供资源来这样做)。提前致谢 :)
在此处运行:https ://www.typescriptlang.org/play#code/ 或在某些打字稿调试环境中或删除所有类型并在节点中运行
interface Inner {
(closureScopedInput?: string): string
}
function outer(input: string): Inner {
debugger
console.log('input:', input);
return function(closureScopedInput: string | undefined) {
debugger
console.log('closureScopedInput changing:', closureScopedInput);
return `output = ${input} ${closureScopedInput}`
}
}
const setClosureScope = outer('1')
console.log('example1:', setClosureScope('2'))
console.log('example2:', setClosureScope('3'))
console.log('example3:', setClosureScope('4'))
console.log('example4:', setClosureScope('5'))
问题:
- 为什么只有在表示为时才第一次
debugger/console.log('input:', input)
命中,而不是在传入新值时的每次后续调用?outer
setClosureScope
setClosureScope
- 这个内存存储在作用域执行上下文和内存引用方面实际上是如何工作的?
结论:
当函数outer
表示为变量时setClosureScope
:
- 传递给外部函数的值作为闭包范围存储在内存中
- 这种将数据包装在闭包中的技术/方法是: - 在对象组合中很常见 - 功能强大,因为它将数据锁定在将这些数据属性封装为成员的对象内的嵌套闭包的范围内