知识卡片

模块隐藏实现

普通读书笔记卡 · 1492.e.1

内容

模块是提供接口却隐藏状态与实现的函数或对象:外层函数定义私有变量和函数,用闭包创建能访问它们的特权函数,最后返回或暴露特权函数,几乎完全摒弃全局变量。例如 serial_maker 只暴露 set_prefix/set_seq/gensym 三方法,外部无法绕过直接改内部 prefix/seq。关联:[[闭包保存状态]];发散:封装价值在于限制可变面,让调用者只依赖稳定协议。

参考来源

- 位置:《JavaScript语言精粹(修订版)》第4章《函数 Functions》"模块"一节 - 结论依据:原文定义模块模式的一般形式(私有变量和函数 + 闭包 + 返回特权函数),并用 serial_maker 例子说明返回对象的方法都不暴露 prefix、seq 变量本身,只能通过约定的方法读写,据此推出模块靠闭包实现接口与实现分离的结论。 - 原始内容:模块是一个提供接口却隐藏状态与实现的函数或对象……模块模式的一般形式是:一个定义了私有变量和函数的函数;利用闭包创建可以访问私有变量和函数的特权函数;最后返回这个特权函数,或者把它们保存到一个可访问到的地方。