JavaScript 模块化开发入门
JS 为什么要模块化
JavaScript 语言最初设计的主要作用仅仅是用来验证表单输入的有效性,为Web页面添加一些动画效果等,并不包含太多的高级语言的特性,此时通常直接在HTML页面中编写简单的 JS 代码或从外部引入一个 JS 文件即可。
随着前端开发技术的发展和演化,JS 在应用程序中的地位显著提升(甚至已经扩展到了服务端应用,如:Node.js),伴随而来的是前端 JS 代码的复杂度也在相应的不断提高,因此 JS 模块化编程成为了一个迫切需要解决的问题。
什么是 JS 模块化
JS 模块化是将一个大的 JS 文件根据功能或职责的需要,拆分成多个相互独立或依赖的小 JS 文件,再进行统一的拼装或加载。
JS 文件拆分后进一步细化了每个文件的具体职责:
- 提高代码可复用性
- 降低代码偶合度
- 更有利于多人协作开发和维护
- …
JS模块化开发 - 全局函数
在早期的开发过程中就是将重复的代码封装到函数中,再将一系列的函数放到一个文件中(HTML或JS)
这种情况下全局函数的方式只能认为它们属于一个模块,但是程序并不能区分哪些函数是同一个模块,如果仅仅从代码的角度来说,这时没有任何模块的概念。
<script>
// 全局 加法(转换成数字再相加)
function add(a, b) { return parseFloat(a) + parseFloat(b);
} // 全局 减法
function substract(a, b) { return parseFloat(a) - parseFloat(b);
}console.log('1+2=' + add('1', '2'));
</script>
JS模块化开发 - 对象封装
通过添加命名空间的形式从某种程度上解决了变量命名冲突的问题,但是并不能从根本上解决命名冲突。
此时从代码级别可以明显区分出哪些函数属于同一个模块。
<script>
// 计算器对象
var calculator = { count: 0, // 加法 add: function (a, b) { return parseFloat(a) + parseFloat(b); }, // 减法 substract: function (a, b) { return parseFloat(a) - parseFloat(b); }
}
console.log(calculator.add('1', '2'));
</script>
JS模块化开发 - 立即执行函数
利用此方式将函数包装成一个独立的作用域,私有空间的变量和函数不会影响到全局作用域(私有公有成员分离)。
以返回值的方式得到模块的公共成员,公开公有方法,可以隐藏私有空间内部的属性。此方式可以有选择的对外暴露自身成员。从某种意义上来说,解决了变量命名冲突的问题。
<script>
var calculator = (function () { var count = 0; // 加法 function addFun(a, b) { return parseFloat(a)+parseFloat(b); }; return { add: addFun }
})(); console.log(calculator.add('1', '2'));
</script>
JS模块化开发规范
- AMD(异步模块定义,Asynchronous Module Definition)
- CMD(通用模块定义,Common Module Definition)
- CommonJS(已经逐渐废弃,不推荐使用)
- ES6 Module(ECMAScript 6 的简称,JavaScript语言的下一代标准)– 推荐使用
注:浏览器目前还不完全支持 ES6 模块,利用 Babel(https://babeljs.io/) 库可以将其转换为 ES5 的写法。
AMD规范采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。
require.js ( RequireJS )实现AMD规范的模块化JS库
CMD是另一种国内发展出来的js模块化方案,它与AMD很类似,不同点在于:AMD 推崇依赖前置、提前执行,CMD推崇依赖就近、延迟执行。
sea.js ( https://github.com/seajs/seajs )实现CMD规范的模块化JS库
Node.js是commonJS规范的主要实践者,CommonJS 的模块提案为在服务器端声明模块指定了一个简单的 API。
CommonJS 已经过时,Node.js 的内核开发者已经逐渐废弃了该规范。
ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,旨在成为浏览器和服务器通用的模块解决方案。
ES6 模块功能主要由两个命令构成:export 和 import。
- export命令用于规定模块的对外接口
- import命令用于输入其他模块提供的功能
JavaScript 模块化开发入门相关推荐
- JavaScript模块化开发整理
在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...
- JavaScript模块化开发(一)基础知识
2019独角兽企业重金招聘Python工程师标准>>> 随着前段JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理 ...
- JavaScript模块化开发的演进历程
写在前面的话 js模块化历程记录了js模块化思想的诞生与变迁 历史不是过去,历史正在上演,一切终究都会成为历史 拥抱变化,面向未来 延伸阅读 - JavaScript诞生(这也解释了JS为何一开始没有 ...
- JavaScript模块化开发技术概述
2019独角兽企业重金招聘Python工程师标准>>> 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应 ...
- 前端JAVASCRIPT模块化开发
什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...
- 初探Javascript模块化开发
随着简单网页逐渐变成交互复杂的网站应用,网页上的Javascript代码也变得越来越庞大,越来越复杂.加之随即而来的多人协作分工的开发方式,每个人只负责其中一个或者几个很小的功能模块,最终必须通过把各 ...
- javascript模块化开发
一.什么是模块化开发 将软件产品看作为一系列功能模块的组合 通过特定的方式实现软件所需模块的划分.管理.加载 二.模块化开发好处 解决命名冲突问题 添加命名空间YUI .EXTJS-可以从一定程度上解 ...
- commonjs 和 es6模块化开发入门
commonjs模块化 首先写一个api,提供给外部调用 //commonjslet sum =(a,b)=> a+b;// 暴露接口 module.exports = {sum // sum: ...
- Node 之 JavaScript 模块化开发
目录 一.模块化 1. 概念 2. 历史 01 - 早期 02 - 现在 3. 问题 问题一 01 - 定义 foo.js 02 - 定义 bar.js 03 - 定义 html 页面 问题二 二.C ...
最新文章
- Java 基础 之 continue和 break
- springboot整合Druid使用
- 华为机试HJ100:等差数列
- 关于ORM的一些外文资料
- UC大裁员:全体带薪休假至3月31日,补偿措施羡煞网友!
- 【转】PPT精典基础教程
- [蓝桥杯python] Sine之舞 :最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐
- android浏览器实现收藏功能,Lua布局fusionapp 收藏功能与历史记录实现
- 关于阿里巴巴icon矢量图显示空白问题
- JAVA学习日志 关于dowhile在周易数字卦程序里的应用
- switchport mode access
- java outer的使用
- NAND FLASH -WARMUP CYCLE
- pandas之dropna()的用法
- iphone阅读html,iphone下Safari查看网页源代码
- Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些
- 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
- golang算法之鬼谷子问徒
- CCF推荐会议 | 计算机理论:截稿日期纵览(含ESA,CONCUR等)
- Java中的引用:强软弱虚