我怎么记得我好像写过相关类型的文章,但是我找遍了我的博客没有~那就再写一遍吧,其实模块化的核心内容也算不上是复杂,只不过需要整理一下,规划一下罢了 。嘻嘻 。
开始写标题的时候我就在纠结一件事情,就是,先吃喜欢吃的,还是后吃喜欢吃的,翻译过来就是我应该先写CommonJS和ES6 Module,还是先写CMD和AMD 。嗯,我决定了,谁先做好了我就先吃谁 。
其实模块化的缘由很简单,就一句话,不对,就一个词,两个字,分类 。如果一定让我在加一点,那应该是“隔离” 。没了~~但是这么少不太好,我举个可能不那么恰当的例子吧 。
刚开始这个世界上只有三个人,起名字的时候会“刻意”的避开彼此已经叫过的名字,他们在一起生活,日子欣欣向荣,一片美好,对未来充满了期待 。
时间飞逝,三个人变成了三十人,他们勉强还是住在一起,扩建了房屋,起名字的时候虽然费事一点,但是也还能不重复,日子还是欣欣向荣,一片美好,对未来充满了期待 。
时间又飞逝,三十人变成了三百人,那这不太好管理了,于是三位首领就说,你们有领导能力的几个人站出来,组成各自的部落,去吧,我相信你们可以的 。于是每个部落住在一起,部落与部落之间的人可以重名,叫名字的时候再加上一个部落的名称呗,嗯~又一片欣欣向荣 。
时间继续飞逝,三百人变成了三千人,这三千人住在几个大部落里也很不方便,你拿我的苹果,我偷了你得猪,这肯定不行,有碍于社会的稳定发展,于是三个创始者叫上部落的组长说,我们给每个人分一块地,盖一个房子,把三五个人分割成一个家庭,家庭之间由部落作为纽带,关联彼此,在形式上又相互独立,不可以随便拿别家的苹果 。很完美~
时间飞飞飞飞逝,三千人变成了三百万人……我们需要法律了 。
OK,上面的小例子,人,就是函数,部落就是命名空间,房子就是IIFE,法律就是后续发展的模块化规范 。那么我们依照上面的描述,如何转换成代码?
一、社会的起源与法律的雏形最开始的时候,浏览器只需要简单的图文展示就是可以了,没什么复杂的交互和逻辑的处理,所以,当我们只有三个人的时候,我们可以很自由,很随意:
function a(){}function b(){}随着Web的发展,交互的增多,项目的扩大,很容易有人也声明了同样名称的函数,于是纷争开始了,那咋解决纷争呢?嗯,命名空间也就是拆分部落,就像这样:
var zaking1 = {a:function(){},b:function(){}}var zaking2 = {a:function(){},b:function(){}}但是这样并不能真正的解决问题,因为虽然从形式上区分了部落,但是部落之间没有任何的隔离,部落内部也是混乱的,所以各个首领就制定了一个方案,IIFE,利用闭包的特性,来实现数据的隔离,暴露出对外的入口:
var module = (function () {var name = "zaking";function getName() {console.log(name);}return { getName };})();module.getName();我们盖好了房子,还给房子建好了可以出入的门,但是我怎么邀请别人进来呢?
var module = (function (neighbor) {var name = "zaking";function getName() {console.log(name + "和邻居:" + neighbor);}return { getName };})("xiaowangba");module.getName();传个参数呗,这就是依赖注入 。在这个阶段,最有代表性的就是jQuery了,它的封闭性的核心实现,跟上面的代码几乎无异,我们可以看下jQuery的模块的实现:
(function (global, factory) {factory(global);})(typeof window !== "undefined" ? window : this, function (window, noGlobal) {if (typeof noGlobal === "undefined") {window.jQuery = window.$ = jQuery;}return jQuery;});
经验总结扩展阅读
- 条件期望:Conditional Expectation 举例详解之入门之入门之草履虫都说听懂了
- 分布式存储系统之Ceph集群存储池操作
- 0的概念是什么
- 咸鱼之王赌狗控制流阵容怎么玩
- 明日之后玻璃窗在哪里买
- 明日之后网易云课堂有什么用
- 我的电脑不显示磁盘
- 挽救爱情的方法
- 如何准备跑步比赛
- 欲加之罪何患无辞下一句