javascript 模块化

在 Node.js 的官方示例代码中,第一行代码引入了 Node.js 的 http 模块:

const http = require(‘http’);

这里想要掌握 http 模块,首先需要先掌握什么是模块,也就是模块的概念,以及分别在 JavaScript 和 Node.js 中的具体使用情况。

在 ECMAScript 2015 发布之前,JavaScript 语言是不存在所谓模块的概念的。JavaScript 只提供了全局域与函数域、函数、对象等内容,那要如何可以解决这个问题呢?


函数的封装

所谓函数,简单来说就是把一系列具有特定作用的语句打包在一起。而且,这些语句的作用域仅在当前函数内。所以,我们可以将函数的封装,作为模块化的第一步。

function callme (){
return ‘this is function.’;
}

上述示例代码,定义了一个 callme 函数,这样就可以在之后的代码中进行调用。而callme 函数可以用来完成一个特定的功能。但,这样做也是有明确的缺点: 污染全局命名空间,并且模块成员之间没有任何关系。callme 函数是一个全局函数。也就是说,你不能在全局作用域中再定义一个 callme函数,不然会引起命名冲突。如果,上述写法不是很理解的话,那可以看一下如下写法:

var callme = function(){
return ‘this is function.’;
}


对象的定义

为了解决封装函数所带来的问题,可以引入 JavaScript 对象的概念。就是把所有相关的模块成员封装在一个对象中,如下所示:

var myModule = {
callme : function(){
return ‘this is function.’;
}
}

这样的好处就是:

解决了全局命名空间可能出现的冲突问题。因为所有的模块成员都是作为一个对象的属性或方法存在的。模块成员之间也存在着某种关系。因为被定义在同一个 JavaScript 对象中,作为属性或方法存在。

而这个对象名成为了所有模块成员对外的一个统一的模块名称。


自调函数

看似引入对象概念后,这个模块的解决方案不错。但,依旧存在着一些问题。比如,我们定义了如下一个模块(对象):

var myModule = {
name : ‘longestory’,
callme : function(){
return ‘this is ‘+this.name;
}
}

对于这样一个模块(对象),我们是可以从外部对该模块(对象)的属性或方法进行修改的。

myModule.name = ‘javascript’;

这就导致了会产生一些意外的安全问题,而我们可以通过自调函数来进行解决。

var myModule = (function(){
var name = ‘longestory’;
function callme(){
return ‘this is ‘+name;
}
})();

根据上述示例代码,在模块(对象)外部就无法修改内部的属性或方法。而综上所述,就是 JavaScript 的模块化基础。


转载自’龙哥有话说’

javascript 模块化相关推荐

  1. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  2. javascript模块化、模块加载器初探

    最常见网站的javascript架构可能是这样的: 一个底层框架文件,如jQuery 一个网站业务框架文件,包含整站公用业务模块类(如弹框.ajax封装等) 多个业务文件,包含每个具体页面有关系的业务 ...

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

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

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

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

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

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

  6. javascript模块化之CommonJS、AMD、CMD、UMD、ES6

    javascript模块化之CommonJS.AMD.CMD.UMD.ES6 一.总结 一句话总结: CommonJS是同步加载模块,用在服务端:AMD是异步加载模块,用于浏览器端 1.为什么服务器端 ...

  7. JavaScript模块化开发整理

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

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

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

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

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

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

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

最新文章

  1. [SqlServer]数据库中自定义拆分字符串函数Split()
  2. hibernate插入Mysql数据库出现中文乱码情况从这5个方面解决
  3. java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)
  4. 推荐系统中的矩阵分解演变方式
  5. 北京玉渊潭开启春节模式 五大版块吸引游客
  6. 带你认识Flink容错机制的两大方面:作业执行和守护进程
  7. UI设计干货模板|首页设计技巧
  8. protobuf 安装_Beego 安装时 一直无响应(443)怎么办
  9. SpringBoot:javalist和set区别
  10. 我的家庭私有云计划-6
  11. 老人机java游戏模拟器_Java模拟器
  12. 微信点餐系统——修改服务器nginx配置
  13. windows上编译,使用libtorrent
  14. 《数解道法》(一)前言
  15. linux 安装minio并设置开机自启动
  16. SSD制作自己的数据集
  17. Linux脚本方式修改Mac地址,两种修改Linux系统中MAC地址的方法
  18. beacon设备使用记录
  19. 2020年团体程序设计天梯赛L1题目集(题目+代码)
  20. matlab是什么意思,x'在matlab是什么意思

热门文章

  1. ubuntu更换源的方法
  2. 股票的最大利润(java算法题,动态规划法的应用)
  3. Java I/O流入门笔记
  4. PAT 1024 科学计数法
  5. 极验验证码 Geetest
  6. 什么是闭包以及闭包有什么作用
  7. 虚拟机VM启动Ubuntu时一直卡在黑屏怎么办
  8. JEECG配置Kisso单点登录
  9. kisso:java 基于 Cookie 的 SSO(单点登录) 中间件 kisso。
  10. Atmosic 获评全球100家最具潜力的半导体公司