异步的模块合并管理器-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 ...
随机推荐
- oracle数据库列的操作
本章和大家分享一下如何在数据库中进行列的一些相关操作. 1.增加列名 (我们先来看一个原始版本) 下面我们增加一个列名tel 记住,增加列时需要把列对应的数据类型要说明,不然会报错. alter t ...
- javascript总结4:javascript常见变量
1 javascript变量 定义:变量在计算机中,是用于存储信息的"容器". 2 使用方法: 2-1 定义变量: var n1; 2-2 变量赋值: var n2=23.45; ...
- python 测试报告发送邮件
使用过程成出现的如下错误 smtplib.SMTPDataError: (554, 'DT:SPM 126 smtp5错误解决办法 1.自动化测试中,调用邮件模块自动发送邮件时,运行脚本报错: s ...
- 再次迷宫救人——BFS
原创 上次用DFS解了迷宫救人:https://www.cnblogs.com/chiweiming/p/9313164.html 这次用BFS(广度优先搜索),实现广度优先搜索比深度优先搜索复杂,思 ...
- MongoDB整理笔记の走进MongoDB世界
本人学习mongodb时间不长,但是鉴于工作的需要以及未来发展的趋势,本人想更深层的认识mongodb底层的原理以及更灵活的应用mongodb,边学边工作实践. mongodb属于nosql中算是最 ...
- React学习笔记3
React的生命周期 生命周期分为三个阶段 1.mounted(初始化的时候) 当我们看见页面元素从JSX变成了DOM节点时,React组件已经被载入(mounted)到页面中了 2.up ...
- session的获取
Springmvc: RequestAttributes ra = RequestContextHolder.getRequestAttributes(); HttpServletRequest re ...
- 数据存储 mongodb
数据存储 mongodb from pymongo import MongoClient import os base_dir = os.getcwd() class MongoPipeline(ob ...
- 原生态js,返回至顶部
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- rest_framwork中ApiView实现分页
from rest_framework.pagination import PageNumberPagination from .serializers import BookSerilizer fr ...