var models={
callback:function(data){
return data
}
}
function define(name,args){
models[name]=args
}
function require(name,callback){
//解析
if(Object.prototype.toString.call( models[name])=="[object Array]"&&models[name].length==1){
models[name]=models[name][0]()
}
if(Object.prototype.toString.call( models[name])=="[object Array]"&&models[name].length>1){
var args=models[name]
var func=args.pop()
var len=args.length
var dataArr=[]
var sync=args.indexOf("callback")
for(var i=0;i<args.length;i++){
var model=args[i]
require(args[i],function(data){
if(model=="callback"){
dataArr.push(function(back){
models[name]=data(back)
require(name,callback)
})
}else{
dataArr.push(data)
}
if(--len==0){
var re1=func.apply(this,dataArr)
if(sync==-1){
models[name]=re1
require(name,callback)
}
}
})
}
}else{
callback(models[name])
}
}
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)
})