理解JavaScript“立即执行函数表达式(IIFE)”来封装模块
下面图片中的代码是土巴兔的这个加密库,JSEncrypt 库的典型初始化方式,它使用了“立即执行函数表达式(IIFE)”来封装模块,并通过 exports 对象暴露接口。这种模式在早期 JavaScript 模块化中非常常见(类似 CommonJS 或 AMD 的变体),目的是避免全局污染、实现私有作用域和导出公共 API。

为了理解这种运行原理 ,下面进行简单的示例学习:
🔍 原理解析:
var JSEncryptExports = {}; // 定义一个空对象作为导出容器
> (function(exports) : void { ... })(JSEncryptExports);
// IIFE:传入 JSEncryptExports,内部可修改它,外部通过变量访问
var JSEncrypt = JSEncryptExports.JSEncrypt;
// 最终从导出对象中取出构造函数/主类
✅ 简单示例:模仿这个结构写一个简易加密库
我们创建一个叫
MyCrypto 的伪加密库,模拟 JSEncrypt 的结构:// 1. 创建导出容器
var MyCryptoExports = {};
// 2. 使用 IIFE 封装逻辑,传入 exports 对象
(function(exports) {
// 私有函数(不对外暴露)
function _internalEncrypt(text) {
return text.split('').reverse().join(''); // 简单反转字符串模拟加密
}
// 公开类/函数
exports.MyCrypto = function() {
this.encrypt = function(text) {
return _internalEncrypt(text);
};
this.decrypt = function(cipherText) {
return _internalEncrypt(cipherText); // 对称解密
};
};
})(MyCryptoExports);
// 3. 从导出对象中获取主类
var MyCrypto = MyCryptoExports.MyCrypto;
// 4. 使用
var crypto = new MyCrypto();
console.log(crypto.encrypt("hello")); // 输出: "olleh"
console.log(crypto.decrypt("olleh")); // 输出: "hello"
运行结果如下:


浙公网安备 33010602011771号