现代的模块机制

大多数模块依赖加载器/管理器本质上都是将模块定义封装进一个友好的API。

var MyModules = (function(){
var modules = {};

function define(name, deps, impl) {
    for(var i = 0; i < deps.length; i++) {
        deps[i] = modules[deps[i]];
    }
    modules[name] = impl.apply(impl, deps);
}

function get(name) {
    return modules[name];
}

return {
    define : define,
    get : get
};
})();

这段的代码的核心是modeules[name] = imp.apply(impl, deps);,为了模块的定义引入包装函数(可以传入任何依赖),并且将返回值,也就是模块的API,储存在一个根据名字来管理的模块列表中。

MyModules.define('bar', [], function() {
    function hellow(who) {
        return 'Let me introduce : ' + who;
    }

    return {
        hellow : hellow
    };
});

MyModules.define('foo', ['bar'], function() {
    var hungry = 'hippo';

    function awesome() {
        console.log(bar.hellow(hungry).toUpperCase());
    }

    return {
        awesome : awesome
    };
});

var bar = MyModules.get('bar');
var foo = MyModules.get('foo');

console.log(bar.hellow('hippo'));   //Let me introduce : hippo
foo.awesome();  //LET ME INTRODUCE : HIPPO

当函数可以记住并访问所在的词法作用域,即使函数是在当前词法作用域之外执行,这是就产生了闭包。

摘自:2017年3月11日 《你不知道的javascript 上卷 - 5.5.1 现代的模块机制》

你可能感兴趣的:(现代的模块机制)