JavaScript是前端三要素之一,也是很多初学Web前端的人遭遇的第一条拦路虎。很多同学表示JavaScript涵盖的知识点太多太复杂、应用也是五花八门完全摸不着头脑。但只要我们一点一点由基础到进阶的学习,就一定能学好JavaScript。接下来小千就给大家分享Web前端学习进阶中有关JavaScript模块化编程的知识。

模块是实现特定功能的一组方法,模块化是一种规范、一种约束,这种约束会大大提升开发效率。JS模块化思想是将每个JS文件看作是一个模块,每个模块通过固定的方式引入,并且通过固定的方式向外暴露指定的内容。

模块化需要实现的功能

1.解决命名冲突。当代码达到一定规模,功能很多的时,命名冲突就会出现,模块化可以很好的解决命名冲突的问题。

2.实现依赖管理。当一个页面要加载多个JS并且他们之际有些还有依赖关系,这时候就需要慎重仔细的排列这些JS的顺序,以保证每个组件都能正常运行,而模块化之后就不用为此多费心思。

3.提高复用性和代码可读性。一个功能为一个模块,每个模块相互独立,互不影响,代码组件封装可以重复利用,去除这个模块不影响其它的。

JavaScript模块化发展

闭包与命名空间

这是最容易想到的也是最简便的解决方式,早在模块化概念提出之前很多人就已经使用闭包的方式来解决变量重名和污染问题。这样每个JS文件都是使用IIFE包裹的,各个JS文件分别在不同的词法作用域中,相互隔离,最后通过闭包的方式暴露变量。每个闭包都是单独一个文件,每个文件仍然通过script标签的方式下载,标签的顺序就是模块的依赖关系。

面向对象开发

这种方法只是闭包方式的小改进,约束js文件返回必须是对象,对象其实就是一些个方法和属性的集合。这样的优点:1)规范化输出,更加统一的便于相互依赖和引用;2)使用‘类’的方式开发,便于后面的依赖进行扩展。本质上这种方法只是对闭包方法的规范约束,并没有做什么根本改动。

YUI

雅虎出品的一个工具,模块化管理只是一部分,其还具有JS压缩、混淆、请求合并(合并资源需要server端配合)等性能优化的工具,可谓是现有JS模块化的鼻祖。通过YUI全局对象去管理不同模块,所有模块都只是对象上的不同属性,相当于是不同程序运行在操作系统上。

CommonJs

2009年Nodejs发布,Commonjs发布之后,就成了Node里面标准的模块化管理工具。同时Node还推出了npm包管理工具,npm平台上的包均满足Commonjs规范,随着Node与npm的发展,Commonjs影响力也越来越大,并且促进了后面模块化工具的发展,具有里程碑意义的模块化工具。

AMD和RequireJS

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

RequireJs是JS模块化的工具框架,是AMD规范的具体实现。但是有意思的是,RequireJs诞生之后,推广过程中产生的AMD规范。RequireJs的优点:1)动态并行加载js,依赖前置,无需再考虑js加载顺序问题;2)核心还是注入变量的沙箱编译,解决模块化问题;3)规范化输入输出,使用起来方便;4)对于不满足AMD规范的文件可以很好地兼容。

CMD和SeaJs

CMD规范由国内(阿里)诞生,借鉴了Commonjs的规范与AMD规范,在两者基础上做了改进。特点:1)define定义模块、require加载模块、exports暴露变量;2)不同于AMD的依赖前置,CMD推崇依赖就近(需要的时候再加载);3)推崇api功能单一,一个模块干一件事。

SeaJs是CMD规范的实现,跟RequireJs类似,CMD也是SeaJs推广过程中诞生的规范。CMD借鉴了很多AMD和Commonjs优点,同样SeaJs也对AMD和Commonjs做出了很多兼容。

ES6中的模块化

ES6规范中终于将模块化纳入JavaScript标准,从此JS模块化被官方扶正,也是未来JS的标准。ES6中的模块化在Commonjs的基础上有所不同,增加了关键字import、export、default、as、from,而不是全局对象。二者有两点主要的区别:1)CommonJS模块输出的是一个值的拷贝,ES6模块输出的是值的引用;2)CommonJS模块是运行时加载,ES6模块是编译时输出接口。

想了解更多JavaScript模块化知识点,你可以关注小千,后期分享更多知识。

本文来自千锋教育,转载请注明出处。

Web前端进阶之JavaScript模块化编程知识相关推荐

  1. JavaScript模块化编程知识分享!

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

  2. 自学前端开发,前端进阶阶段需要学习哪些知识?

    今天要跟大家分享的文章是关于web前端进阶阶段需要学习哪些知识?已经入门web前端想要提升自己技术的小伙伴们来和小编一起看一看本篇文章吧,希望本篇文章能够对大家有所帮助. 1.完善我们的基础知识 (1 ...

  3. 如何快速学Web前端开发?JavaScript函数好学吗?

    如何快速学Web前端开发?JavaScript函数好学吗?很多企业在招聘Web前端工程师时会倾向于招聘JavaScript技术的人才,因此专业中必然要包含JavaScript知识.函数是为完成某一功能 ...

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

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

  5. web前端进阶<7>:3d图像翻转效果

    这几天又闲着无聊,自己学的东西又有一点不牢固了,需要写一个小程序来巩固一下,相信大家也时有同感吧!那么这一期就给大家带来一个炫酷的相册3d翻转效果,如果搭上炫酷的文字和动画那肯定是高端.霸气上档次的: ...

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

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

  7. 好程序员web前端教程分享JavaScript验证API

    好程序员web前端教程分享JavaScript验证API,小编每天会分享一下干货给大家.那么今天说道的就是web前端培训课程中的章节. JavaScript验证API 约束验证DOM方法 Proper ...

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

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

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

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

最新文章

  1. Mysql错误1045解决方法
  2. OnClientClick和OnClick同时使用!
  3. 常见服务器解析漏洞(IIS,Nginx,Apache)
  4. 【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】
  5. spring roo_使用Spring Roo进行概念验证
  6. leetcode 73 矩阵置零 C++ 两种解法
  7. 信息学奥赛一本通 1067:整数的个数 | OpenJudge NOI 1.5 11
  8. Oracle 中国研发中心裁员已成定局,云时代下一个是谁?
  9. 在ASP中常见的错误80004005信息和解决办法
  10. 如何让4年前的电脑装win10开机跑进15秒
  11. linux下挂载ntfs分区错误解决方法
  12. 震惊,线程共享变量使用不当引发血案
  13. 用scanf输入long long 型的数
  14. VMware Workstation 12 Pro 安装mac系统中遇到的一些问题:
  15. win7网络不显示共享计算机,win7系统看不到局域网其他计算机怎么办
  16. 谷歌浏览器Chrome设置不缓存
  17. 基于Excel的股票回测
  18. [bowen干货]-redis常用五种数据类型命令和场景描述
  19. 300句子与7000单词
  20. [POI2008]MAF-Mafia

热门文章

  1. 论文解读 | 基于神经网络的知识推理
  2. PaperWeekly社区 | 知识图谱 vs. 对话系统专题讨论
  3. 2020.10.04蓝桥测试
  4. 深度学习入门之PyTorch学习笔记:深度学习框架
  5. 查看swintransformer的网络结构
  6. 安装程序检测到无法验证文件的发行者_InstallShield Installation 文件
  7. jvisualvm安装Visual GC插件
  8. 十大经典排序算法总结(够兄弟们喝一壶的)
  9. linux通过命令行本地目录取消svn关联
  10. CG CTF WEB file_get_contents