月下孤井 发表于 2023-2-9 21:54:27

请大神讲解一下下面这段JS代码

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

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

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

    function require(name) {
      if (module_list) {
            return module_list
      } 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模块系统。

月下孤井 发表于 2023-2-10 01:01:16

不二如是 发表于 2023-2-9 23:18
语句看不懂,还是函数关系看不懂,还是全都看不懂。。。

主要是函数关系看不懂,执行顺序也捋不顺
页: [1]
查看完整版本: 请大神讲解一下下面这段JS代码