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 模块化开发入门相关推荐

  1. JavaScript模块化开发整理

    在网上已经有很多关于模块化开发的文章了,这里还是按照自己的理解来整理一下. 随着项目文件的越来越大和需求的越来越贴近现实(我发现现在客户不如:一个领导说我要审批你们报上来的资料,系统发布以后用的还不错 ...

  2. JavaScript模块化开发(一)基础知识

    2019独角兽企业重金招聘Python工程师标准>>> 随着前段JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理 ...

  3. JavaScript模块化开发的演进历程

    写在前面的话 js模块化历程记录了js模块化思想的诞生与变迁 历史不是过去,历史正在上演,一切终究都会成为历史 拥抱变化,面向未来 延伸阅读 - JavaScript诞生(这也解释了JS为何一开始没有 ...

  4. JavaScript模块化开发技术概述

    2019独角兽企业重金招聘Python工程师标准>>> 什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应 ...

  5. 前端JAVASCRIPT模块化开发

    什么是模块化开发? 前端开发中,起初只要在script标签中嵌入几十上百行代码就能实现一些基本的交互效果,后来js得到重视,应用也广泛起来了,jQuery,Ajax,Node.Js,MVC,MVVM等 ...

  6. 初探Javascript模块化开发

    随着简单网页逐渐变成交互复杂的网站应用,网页上的Javascript代码也变得越来越庞大,越来越复杂.加之随即而来的多人协作分工的开发方式,每个人只负责其中一个或者几个很小的功能模块,最终必须通过把各 ...

  7. javascript模块化开发

    一.什么是模块化开发 将软件产品看作为一系列功能模块的组合 通过特定的方式实现软件所需模块的划分.管理.加载 二.模块化开发好处 解决命名冲突问题 添加命名空间YUI .EXTJS-可以从一定程度上解 ...

  8. commonjs 和 es6模块化开发入门

    commonjs模块化 首先写一个api,提供给外部调用 //commonjslet sum =(a,b)=> a+b;// 暴露接口 module.exports = {sum // sum: ...

  9. Node 之 JavaScript 模块化开发

    目录 一.模块化 1. 概念 2. 历史 01 - 早期 02 - 现在 3. 问题 问题一 01 - 定义 foo.js 02 - 定义 bar.js 03 - 定义 html 页面 问题二 二.C ...

最新文章

  1. Java 基础 之 continue和 break
  2. springboot整合Druid使用
  3. 华为机试HJ100:等差数列
  4. 关于ORM的一些外文资料
  5. UC大裁员:全体带薪休假至3月31日,补偿措施羡煞网友!
  6. 【转】PPT精典基础教程
  7. [蓝桥杯python] Sine之舞 :最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐
  8. android浏览器实现收藏功能,Lua布局fusionapp 收藏功能与历史记录实现
  9. 关于阿里巴巴icon矢量图显示空白问题
  10. JAVA学习日志 关于dowhile在周易数字卦程序里的应用
  11. switchport mode access
  12. java outer的使用
  13. NAND FLASH -WARMUP CYCLE
  14. pandas之dropna()的用法
  15. iphone阅读html,iphone下Safari查看网页源代码
  16. Atitit db analysis statistics tonjyi fsy数据库统计分析目录1. Atitit 数据库表与注释文档与统计(表,说明) 11.1. 获取表列表 数据库包含哪些
  17. 【keepass】利用keepassxc-browser浏览器扩展和keepassnatmsg插件实现密码自动填充(KeePassHttp-Connector/KeePassHttp)
  18. golang算法之鬼谷子问徒
  19. CCF推荐会议 | 计算机理论:截稿日期纵览(含ESA,CONCUR等)
  20. Java中的引用:强软弱虚

热门文章

  1. CNN训练与优化技巧
  2. SqlServer列转行查询--Pivot函数
  3. PIVOT函数与UNPIVOT函数的运用
  4. html网页图片和文字水平居中垂直居中显示
  5. 高并发编程-Thread#join方法的使用及使用场景分析
  6. Python中的if...elif嵌套
  7. MT6582/MT6580处理器功能对比资料分享
  8. 牛客网校招模拟-好多鱼
  9. 流媒体时代,如何看待音乐版权
  10. C#里Directory类的常用方法