鱼C论坛

 找回密码
 立即注册
查看: 1197|回复: 2

[已解决]请大神讲解一下下面这段JS代码

[复制链接]
发表于 2023-2-9 21:54:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 月下孤井 于 2023-2-9 21:55 编辑

let Module = (() => {
    let module_list = {};

    function define(name, rely, callback) {
        if (module_list[name]) {
            console.log("The module have already existed!")
        } else {
            for (let i = 0; i < rely.length; i++) {
                rely[i] = module_list[rely[i]];
            }
            module_list[name] = callback.apply(callback, rely);
        }
    }

    function require(name) {
        if (module_list[name]) {
            return module_list[name]
        } else {
            console.log("There is no such module!")
        }
    }

    let api = {
        "define": define,
        "require": require
    };
    return api;
})();

Module.define("test", [], () => {
    function sayHello(name) {
        return name + ",你好啊";
    }

    return {
        "sayHello": sayHello
    }
})

Module.define("haha", [], () => {
    function gotoHZ(name) {
        return name + "要去杭州玩了";
    }

    return {
        "gotoHZ": gotoHZ
    }
})
Module.define("my_module", ["test", "haha"], (test, haha) => {
    let name = "andrew";

    function sayHello2() {
        let str = test.sayHello(name);
        console.log(haha.gotoHZ("章炜"))
        str = str + ",今天天气不错噢";
        return str;
    }

    return {
        "sayHello2": sayHello2
    }
})

console.log(Module.require('my_module').sayHello2())
console.log(Module.require('test').sayHello("steve"))
最佳答案
2023-2-9 23:18:26
本帖最后由 不二如是 于 2023-7-19 10:22 编辑

语句看不懂,还是函数关系看不懂,还是全都看不懂。。。

这段代码实现了一个简单的模块加载器,主要功能有:

1. 定义Module对象,实现模块的定义(define)和加载(require)

2. define方法用来定义模块,它接受三个参数:模块名称、依赖模块列表、模块初始化函数

3. require方法用来加载模块,根据模块名称返回模块导出的接口

4. 模块初始化函数可以接收依赖模块的导出作为参数,并返回当前模块的对外接口

5. 通过闭包保存模块列表module_list,实现模块instances隔离和缓存

6. 加载一个模块时,会先加载它所依赖的模块

7. test、haha、my_module演示了模块的定义和加载过程

8. my_module依赖test和haha模块,在它的初始化函数中加载依赖并使用

9. 最后加载my_module模块,打印输出sayHello2函数的执行结果

这个模块加载器实现了CommonJS规范的基本功能,支持模块定义、依赖声明、依赖加载等,是一个简单的JS模块系统。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-2-9 23:18:26 | 显示全部楼层    本楼为最佳答案   
本帖最后由 不二如是 于 2023-7-19 10:22 编辑

语句看不懂,还是函数关系看不懂,还是全都看不懂。。。

这段代码实现了一个简单的模块加载器,主要功能有:

1. 定义Module对象,实现模块的定义(define)和加载(require)

2. define方法用来定义模块,它接受三个参数:模块名称、依赖模块列表、模块初始化函数

3. require方法用来加载模块,根据模块名称返回模块导出的接口

4. 模块初始化函数可以接收依赖模块的导出作为参数,并返回当前模块的对外接口

5. 通过闭包保存模块列表module_list,实现模块instances隔离和缓存

6. 加载一个模块时,会先加载它所依赖的模块

7. test、haha、my_module演示了模块的定义和加载过程

8. my_module依赖test和haha模块,在它的初始化函数中加载依赖并使用

9. 最后加载my_module模块,打印输出sayHello2函数的执行结果

这个模块加载器实现了CommonJS规范的基本功能,支持模块定义、依赖声明、依赖加载等,是一个简单的JS模块系统。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-2-10 01:01:16 | 显示全部楼层
不二如是 发表于 2023-2-9 23:18
语句看不懂,还是函数关系看不懂,还是全都看不懂。。。

主要是函数关系看不懂,执行顺序也捋不顺
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 12:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表