理解JavaScript“立即执行函数表达式(IIFE)”来封装模块

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

image

为了理解这种运行原理 ,下面进行简单的示例学习:

🔍 原理解析:

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"

 运行结果如下:

image

 

posted @ 2026-02-26 11:30  chenlight  阅读(0)  评论(0)    收藏  举报