为什么要模块化编程

如果JS也可以像类似python,Java使用import,引入我们想要的模块,想要什么模块,就加载什么模块,可以给前端编程带来更多的便捷,结构更加清晰明了。但是,这样做有一个前提,那就是大家必须以同样的方式编写模块。

目前,Javascript模块规范共有两种:CommonJS和AMD。

CommonJS

2009年,美国程序员Ryan Dahl创造了node.js项目,将javascript语言用于服务器端编程,标志"Javascript模块化编程"正式诞生。在浏览器环境下,没有模块也不是特别大的问题,毕竟网页程序的复杂性有限;但是在服务器端,一定要有模块,与操作系统和其他应用程序互动,否则根本没法编程。node.js的模块系统,就是参照CommonJS规范实现的。在CommonJS中,有一个全局性方法require(),用于加载模块。

var math = require('math');math.add(2,3); // 5

但是,由于一个重大的局限,使得CommonJS规范不适用于浏览器环境。在第一行require('math')之后运行,因此必须等math.js加载完成。也就是说,如果加载时间很长,整个应用就会停在那里等。这对服务器端不是一个问题,因为所有的模块都存放在本地硬盘,可以同步加载完成,等待时间就是硬盘的读取时间。但是,对于浏览器,这却是一个大问题,因为模块都放在服务器端,等待时间取决于网速的快慢,可能要等很长时间,浏览器处于"假死"状态。

因此,浏览器端的模块,不能采用"同步加载"(synchronous),只能采用"异步加载"(asynchronous)。这就是AMD规范诞生的背景。

AMD

AMD是"Asynchronous Module Definition"的缩写,意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

AMD也采用require()语句加载模块,但是不同于CommonJS,它要求两个参数:

require([module], callback);

第一个参数[module],是一个数组,里面的成员就是要加载的模块;第二个参数callback,则是加载成功之后的回调函数。如果将前面的代码改写成AMD形式,就是下面这样:

require(['math'], function (math) {math.add(2, 3);
});

我们经常听到的一个Javascript库:require.js,它实现了AMD规范,我们可以方便的用来模块化管理。

转载于:https://www.cnblogs.com/zhouwenhong/p/3969587.html

模块化编程AMDCommonJS相关推荐

  1. (转)Javascript模块化编程(一):模块的写法

    转自 ruanyifeng 系列目录: Javascript模块化编程(一):模块的写法 Javascript模块化编程(二):AMD规范 Javascript模块化编程(三):Require.js的 ...

  2. Javascript模块化编程(一):模块的写法

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  3. keil c语言模块化编程,keil C模块化编程总结

    昨晚看了下模块化编程的东西,把自己的工程整了整,可惜没成功.今早发神经似的起床敲代码,很快就发现了错误,原来是条件宏定义的头文件名忘改了,汗!!! 整理下模块化编程的要点,感谢以下三位UP主的帖子: ...

  4. Javascript模块化编程:AMD规范

    一.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写 ...

  5. 嵌入式编程之模块化编程

    原文出处:http://blog.csdn.net/wanruoqingkong/article/details/24286625 当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你 ...

  6. Python的模块化编程

    我们首先以一个例子来介绍模块化编程的应用场景,有这样一个名为requirements.py的python3文件,其中两个函数的作用是分别以不同的顺序来打印一个字符串: def example1():a ...

  7. Javascript模块化编程require.js的用法

    JS模块化工具requirejs教程(一):初识requirejs http://www.runoob.com/w3cnote/requirejs-tutorial-1.html JS模块化工具req ...

  8. C语言模块化编程的例子

    以往写C语言程序都是一个文件里面写个几十.几百行,在练算法的时候还可以,现在搞开发需要模块化编程,所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个 .c 文件可以被称为一 ...

  9. Web前端进阶之JavaScript模块化编程知识

    JavaScript是前端三要素之一,也是很多初学Web前端的人遭遇的第一条拦路虎.很多同学表示JavaScript涵盖的知识点太多太复杂.应用也是五花八门完全摸不着头脑.但只要我们一点一点由基础到进 ...

最新文章

  1. java ee webservice_javaEE调用webservice总结【利用WSDL】(转载)
  2. Unity Editor已停止工作
  3. POJ.3648.Wedding(2-SAT)
  4. 天锐绿盾解密_天锐绿盾携手衡阳规划设计院 实现信息系统安全管理
  5. ibm 小型计算机8408,IBM小型机 Power8 E850配置好不好
  6. 重学java基础第二十五课:数据类型
  7. React开发(126):ant design学习指南之form中的自定义校验validator
  8. 看懂云计算、虚拟化和容器,这一篇就够啦!
  9. 字谜 java_java - 2字的字谜 - 堆栈内存溢出
  10. bootstrapt学习指南_bootstrap-知识点梳理-学习入门篇
  11. leetcode1088
  12. ColorUI 微信小程序 商品详情页模板,仿微信胶囊
  13. android实现图片自动轮播代码,Android实现图片轮播切换实例代码
  14. 德语区国家的摄影测量与遥感
  15. (十七)关于安装智能家居3大方面你需要注意的
  16. Retinanet训练自己的数据(1):数据准备
  17. 新浪搜狐网易等那些老牌互联网公司 现在都怎样了?
  18. 在高并发的情况下,利用redis来处理库存超卖和遗留问题
  19. transition(过渡)与animation(动画)的区别
  20. PostgreSQL函数——时间函数

热门文章

  1. 记TX实习生笔试归来
  2. 处理网络故障常用的命令
  3. 如何使用Android SDK开发Android应用?
  4. .Net面试题(1)
  5. Elasticsearch 及 Kibana 安装篇
  6. 微信小程序-设置启动页面
  7. 洛谷1020导弹拦截
  8. 中国人工智能学会通讯——机器人组件技术在智能制造系统中的应用
  9. VS2013 VS2015 VS2017调试出现无法启动iis express web服务器
  10. 全球IPv6网络6月6日正式启动