
正文
异步的模块合并管理器-m3m4版本和jquery版本(原创)
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
m3m4版本
(function(w){ var loading={} var models={} function define(name,args){ loading[name]=true models[name]=args } function require(name,callback){ var next=function(){ require(name,callback) } if(loading[name]&&models[name].length==1){ models[name]=models[name][0]() loading[name]=false } //解析 if(loading[name]&&models[name].length>1){ var args=models[name] var func=args.pop() var len=args.length var dataArr=[] for(var i=0;i<args.length;i++){ var model=args[i] require(model,function(data){ dataArr.push(data) if(--len==0){ var sync=args.indexOf("$callback") if(sync==-1){ models[name]=func.apply(this,dataArr) loading[name]=false next() }else{ dataArr[sync]=function(back){ models[name]=back loading[name]=false next() } func.apply(this,dataArr) } } }) } }else{ callback(models[name]) } } w.m3m4=function(func){ func(define,require) }})(typeof window!="undefined"?window:global)
demo1
m3m4(function(define,require){ define("a",[function(a){ return "a" }]) define("b",["a","$callback",function(a,callback){ console.log(a) setTimeout(function(){ callback("b sync") },1000) }]) define("c",["$callback","a","b",function(callback,a,b){ console.log(b) console.log(a) setTimeout(function(){ callback("c sync") },1000) }]) require("c",function(c){ console.log(c) })})
jQuery版本
(function($){ var loading={} var models={} function define(name,args){ loading[name]=true models[name]=args } function require(name,callback){ var next=function(){ require(name,callback) } if(loading[name]&&models[name].length==1){ models[name]=models[name][0]() loading[name]=false } //解析 if(loading[name]&&models[name].length>1){ var args=models[name] var func=args.pop() var len=args.length var dataArr=[] for(var i=0;i<args.length;i++){ var model=args[i] require(model,function(data){ dataArr.push(data) if(--len==0){ var sync=args.indexOf("$callback") if(sync==-1){ models[name]=func.apply(this,dataArr) loading[name]=false next() }else{ dataArr[sync]=function(back){ models[name]=back loading[name]=false next() } func.apply(this,dataArr) } } }) } }else{ callback(models[name]) } } $.define=define $.require=require})($)
demo2
var define= $.definevar require= $.requiredefine("a",[function(a){ return "a"}])define("b",["a","$callback",function(a,callback){ console.log(a) setTimeout(function(){ callback("b sync") },1000)}])define("c",["$callback","a","b",function(callback,a,b){ console.log(b) console.log(a) setTimeout(function(){ callback("c sync") },1000)}])require("c",function(c){ console.log(c)})





