异步的模块合并管理器-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= $.define
var require= $.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)
})
异步的模块合并管理器-m3m4版本和jquery版本(原创)的更多相关文章
- 使用 NuGet 包管理器在 Visual Studio 中安装和管理包
https://docs.microsoft.com/zh-cn/nuget/consume-packages/install-use-packages-visual-studio 通过 Window ...
- javascript 模块依赖管理的本质
模块模式定义 模块是'javascript'的一种设计模式,它为函数定义一个包装函数,并且该包装函数的返回值与模块的API保持一致: function createModule() { functio ...
- 使用 Windows 包管理器 (winget) 安装 .Net
用户可以在 Windows 10 和 Windows 11 计算机上使用 winget 命令行工具来发现.安装.升级.删除和配置应用程序. 此工具是 Windows 程序包管理器服务的客户端接口. 以 ...
- [Web 前端] 使用yarn代替npm作为node.js的模块管理器
cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency managemen ...
- 使用yarn代替npm作为node.js的模块管理器
使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure d ...
- nodejs-npm模块管理器
JavaScript 标准参考教程(alpha) 草稿二:Node.js npm模块管理器 GitHub TOP npm模块管理器 来自<JavaScript 标准参考教程(alpha)> ...
- JS模块规范 前端模块管理器
一:JS模块规范(为了将js文件像java类一样被import和使用而定义为模块, 组织js文件,实现良好的文件层次结构.调用结构) A:CommonJS就是为JS的表现来制定规范,因为js没有模块的 ...
- 在SSIS 的 64 位版本中不支持 Excel 连接管理器
Microsoft sql server 2008 R2——> SQL SERVER Business Intelligence Development Studio 使用EXCEL数据源或目标 ...
- Webpack: 为Web开发而生的模块管理器[转]
Webpack: 为Web开发而生的模块管理器 原文地址:http://hanjianwei.com/2014/09/10/webpack-package-manager-for-web/ 10 Se ...
随机推荐
- 多重if else和switch case的区别
int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...
- 解决error C2365
今天把一个FILE_BOTH_DIRECTORY_INFORMATION结构的变量,愣是写成了“enum”枚举....然后出现error C2365错误. 在CSDN上看到别人遇到问题,有人回复了“如 ...
- PHP中循环结构之foreach循环语句
在PHP中foreach循环语句,常用于遍历数组,一般有两种使用方式:不取下标.取下标. (1)只取值,不取下标 <?php foreach (数组 as 值){ //执行的任务 } ?> ...
- HDU 4803 Poor Warehouse Keeper(贪心)
题目链接 题意 :屏幕可以显示两个值,一个是数量x,一个是总价y.有两种操作,一种是加一次总价,变成x,1+y:一种是加一个数量,这要的话总价也会相应加上一个的价钱,变成x+1,y+y/x.总价显示的 ...
- Recurrent Neural Network(递归神经网络)
递归神经网络(RNN),是两种人工神经网络的总称,一种是时间递归神经网络(recurrent neural network),另一种是结构递归神经网络(recursive neural network ...
- 编写高质量代码改善C#程序的157个建议——建议4: TryParse比Parse好
建议4: TryParse比Parse好 如果注意观察除string外的所有基元类型,会发现它们都有两个将字符串转型为本身的方法:Parse和TryParse.以类型double为例,这两个方法最简单 ...
- [原创]java:Stream、Socket等源码分析
一.对于java启动之后的线程的说明 java在启动后会有几个特殊线程: 1.main线程,主线程 2.JVM线程,虚拟机的线程 3.GC垃圾回收线程,是个守护线程 4.EDT&Toolkit ...
- Bitmap压缩到指定尺寸大小,获取圆角、圆形图片
/** * 使用Matrix将Bitmap压缩到指定大小 * @param bitmap * @param w * @param h * @return */ public static Bitmap ...
- Go语言最佳实践——异常和错误
Go语言将错误和异常两者区分对待. 1.Go语言中处理错误的惯用法是将错误以函数或者方法最后一个返回值的形式将其返回,并总是在调用它的地方检查返回的错误值. 2.对于“不可能发生的事情”称为异常,可使 ...
- C# 读取Text文本,写入Text文本
//读取 private void showMess() { this.dataGridViewX2.Rows.Clear(); //将车辆信息一行行添加到datagreatview 里面 Strea ...