js常用框架原理

(function(){         //存储已经创建的模块     var moduleMap = {};     //判断是否已经加载过     var fileMap   = {};     //空函数     var noop = function(){};             /*注册为全局变量*/     window.thin = {        //在这里定义的模块,都被注册到了moduleMap里面                   /*define :主要作用moduleMap中注册模块         *name           模块的名称         *dependencies   模块的依赖项         *factory        模块的函数体         */                 define:function(name,dependencies,factory){             if(!moduleMap[name]){                 //模块的结构                 var module = {                     name:name,                     dependencies:dependencies,                     factory:factory                 };                 moduleMap[name] = module;             }             return moduleMap[name]         },         /*use: 主要作用得到模块的使用权         *name   模块的名称         *         */         use:function(name){             //module 需要使用的模块的引用             var module = moduleMap[name];                         if(!module.entity){                 //用来存储依赖项引用,用于传入factory,方便函数调用                 var args = [];                 //遍历module的依赖项数组                 for(var i=0;i<module.dependencies.length;i++){                     //检测依赖项数组的entity属性,如果已经使用,获取引用                     if(moduleMap[module.dependencies[i].entity]){                         args.push(moduleMap[module.dependencies[i]].entity)                     }                     //如果没有使用,则获取这个模块的使用权                     else{                         args.push(this.use(module.dependencies[i]))                     }                 }                                 module.entity = module.factory.apply(noop,args) //noop 空函数             }             return module.entity;         },         /*实现按需加载模块,而不是一次性加载所有模块         *实现原理:动态创建script标签,设置src,添加到document.head,监听完成的事件         *fileMap 记录已经加载的文件的路径,防止重复加载,当所有加载完,执行回调         */         require:function(pathArr,callback){             for(var i = 0;i<pathArr.length;i++){                 var path = pathArr[i];                 //如果还没有加载                 if(!fileMap[path]){                     var head = document.getElementByTagName("head")[0];                     var node = document.createElement("script");                     node.type= "text/javascript";                     node.async="true";                     node.src = path+".js";                     //当加载完成后,                     node.onload = function(){                         fileMap[path] = true;                         head.removeChild(node);                         checkAllFiles()

转载于:https://www.cnblogs.com/GoodPingGe/p/5171420.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值