Javascript AMD学习
我们知道在其它编程语言中, 都有包(命令空间)的概念, 帮助我们更好的管理代码结构. 如java中的package, python中的module. 但是在js语言中, 在一个页面执行环境内, 所有引入的外部的js文件都会在同一个global上下文中执行, 做不到几点: 不能动态加载我们只需要的模块; 没有package的概念, 代码管理混乱. 虽然语言这一层次做不到, 但是从上面一层可以做到, 所以就有了AMD规范标准: Asynchronous module definition.
假设我们现在的文件目录如下:
我们在amd.html里定义两个核心函数: require和define
var modules = {};
var defQ = []; function onLoad(script, module){
script.addEventListener("load", function(){
var defFactory = defQ.shift();
module.def = defFactory;
module.executed = 1;
}, false);
} function require(deps, callback){
for(var i = 0; i < deps.length; i++){
var module = {
executed: 0,
url: deps[i]
}; var script = document.createElement("script");
script.type = "text/javascript";
script.src = deps[i];
script.charset = "utf-8";
onLoad(script, module); modules[deps[i]] = module; document.body.appendChild(script);
} var id = setInterval(function(){
var args = [];
for(var i = 0; i < deps.length; i++){
var dep = modules[deps[i]];
if(!dep.executed){
return;
}else{
args.push(dep.def());
}
} clearInterval(id);
callback.apply(null, args);
}, 1000); }; function define(factory){
defQ.push(factory);
}
现在我们定义了两个js模块文件: my/a.js和my/b.js, 分别如下:
// my/a.js
define(function(){
return {
name: "tony"
}
});
// my/b.js
define(function(){
return {
name: "lily"
}
});
现在我们可以在其它任何一个地方来动态加载这两个模块文件了, 使用如下:
require(['js/my/a.js', 'js/my/b.js'], function(a, b){
console.debug(a.name + " " + b.name);
});
上面的require和define只是一个简单的AMD思路, 实际中复杂得多, 如要处理循环信赖等等复杂的情况.
Javascript AMD学习的更多相关文章
- javascript立体学习指南
javascript立体学习指南第一章:首先了解javascript 首先,什么是javascript? JavaStrip出生于1995年,是一种文本脚本语言,成都装修公司是一种动态的.弱类型的.基 ...
- 正则表达式(javascript)学习总结
正则表达式在jquery.linux等随处可见,已经无孔不入.因此有必要对这个工具认真的学习一番.本着认真.严谨的态度,这次总结我花了近一个月的时间.但本文无任何创新之处,属一般性学习总结. 一.思考 ...
- 大量Javascript/JQuery学习教程电子书合集
[推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人 不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小 15天学会jQuery(完整版).pd ...
- [推荐分享]大量Javascript/JQuery学习教程电子书合集,送给有需要的人
不收藏是你的错^_^. 经证实,均可免费下载. 资源名称 资源大小 15天学会jQuery(完整版).pdf 274.79 KB 21天学通JavaScript(第2版)-顾宁燕扫描版.pdf ...
- JavaScript 基础学习1-day14
JavaScript 基础学习1 知识预览JavaScript概述二 JavaScript的基础三 JavaScript的对象BOM对象DOM对象实例练习js扩展 JavaScript概述 JavaS ...
- JavaScript正则表达式学习笔记(二) - 打怪升级
本文接上篇,基础部分相对薄弱的同学请移步<JavaScript正则表达式学习笔记(一) - 理论基础>.上文介绍了8种JavaScript正则表达式的属性,本文还会追加介绍几种JavaSc ...
- 初步总结javascript中学习DOM之前的知识
嘿嘿,又到了周末时间,周六其实就是总结这周的学习的,记得周二周三刚开始接触javascript时间,还是不知道怎么学习的,就感觉找不到方向,那时间学习的只是总结了一些简单的定义或者是学习结构,今天就把 ...
- JavaScript紧凑学习
JavaScript紧凑学习 windows本地,调用命令行: win键+R 键入cmd , (cmd是Command 命令行 简称) 目录是C盘下的 C:\Users\Administrator&g ...
- javascript正则表达式 - 学习笔记
JavaScript 正则表达式 学习笔记 标签(空格分隔): 基础 JavaScript 正则表达式是用于匹配字符串中字符组合的模式.在javascript中,正则表达式也是对象.这些模式被用于Re ...
随机推荐
- Oracle中Cursor的用法
关键字 概念 类型 异常处理 一 概念 游标是SQL的一个内存工作区,由系统或用户以变量的形式定义.游标的作用就是用于临时存储从数据库中提取的数据块.在某些情况下,需要把数据从存放在磁 盘的表中 ...
- 被解放的GPU CSS3动画加速
概念 图形处理器( Graphics Processing Unit ) 专门用来处理在个人电脑.工作站或游戏机上图像运算工作 显卡的“心脏” 90%以上的新型台式电脑和笔记本型电脑拥有集成图形处理器 ...
- iframe高度自适应内容
JS自适应高度,其实就是设置iframe的高度,使其等于内嵌网页的高度,从而看不出来滚动条和嵌套痕迹.对于用户体验和网站美观起着重要作用. 如果内容是固定的,那么我们可以通过CSS来给它直接定义一个高 ...
- 你也可以用java的swing可以做出这么炫的mp3播放器_源码下载
I had published the blog : 你用java的swing可以做出这么炫的mp3播放器吗? and to display some screenshots about this M ...
- 使用IE建多个会话的小技巧
1 按F10出现菜单 2 选择文件----新建会话即可
- java实现MD5加密
mport java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Creat ...
- github上怎么预览页面
直接在 http://htmlpreview.github.io/? 后面加上git上的地址就可以预览了 比如 http://htmlpreview.github.io/?https://github ...
- Eclipse序列号生成代码
import java.io.*; public class MyEclipseGen { private static final String LL = "Decompiling thi ...
- ready是先执行的,load后执行,DOM文档的加载步骤
在jq中在文档载入完毕后有这几种方式去执行指定函数: $(document).ready(function() { // ...代码... }); //document ready 简写 $(func ...
- ant学习
如果在构建文件当中depends后面有多个依赖,而且这多个依赖还相互依赖,那么只会执行被依赖的任务,不会重复执行任务 ant学习