最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何利用函数表达式实现模块化封装
时间:2026-07-16 08:46:58 编辑:袖梨 来源:一聚教程网
核心是用IIFE创建私有作用域,通过返回对象暴露有限接口;括号确保立即执行,防止误判为函数声明;可传入依赖项实现依赖注入;利用闭包维持私有变量;支持多实例隔离与UMD兼容。
核心是用立即执行函数表达式(IIFE)创建私有作用域,把变量和函数关在里面,只通过返回的对象暴露有限接口。
用 IIFE 构建独立作用域
函数表达式加括号后立刻执行,形成一个封闭环境,内部声明的变量、函数不会跑到全局去。这是封装的前提。
- 标准写法:(function() { /* 私有逻辑 */ })();
- 括号不能省——防止 JS 引擎误判为函数声明
- 可传入依赖项,比如
window、jQuery或工具函数,既方便压缩,也明确外部依赖
只暴露可控的公共接口
模块必须主动返回一个对象,这个对象就是外界唯一能接触到的部分。它不等于内部全部,只是精心挑选的“窗口”。
- 返回普通方法集合:
return { init() {}, getData() {} }; - 支持链式调用:方法里返回
this或新对象即可 - 避免直接暴露原始数据,比如不要
return { count },而应提供getCount()和setCount()
利用闭包实现真正的私有成员
在 IIFE 内部定义的变量,默认对外不可见;只有返回对象中引用的函数,才能持续访问它们——这就是闭包赋予的“特权”。
- 例如:
let token = null;在外层无法读写,但getToken()和setToken()可以操作它 - 每次调用该函数表达式,都会生成一套全新的私有状态,互不干扰
- 多个模块共享状态?可以传入同一个对象作为参数,在闭包外协调
配合依赖注入提升灵活性
把 jQuery、工具库等依赖作为参数传进 IIFE,而不是硬编码引用,让模块更易测试、替换和压缩。
- 示例:
(function($, utils) { /* 使用 $ 和 utils */ })(jQuery, myUtils); - 开发时用全名,生产环境可被压缩工具缩成单字母(如
j),减小体积 - 结合 UMD 模板,一份代码同时适配浏览器全局、AMD、CommonJS 环境
相关文章
- 围产保健卡使用手册 07-16
- 桦树叶绘制技巧 07-16
- 寻踪皮影师绳武 挑战清河区域影舞 BOSS 07-16
- 围产手册办理指引 07-16
- 石家庄围产保健本办理指引 07-16
- 桦字组词全集 07-16