首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript模块化的作用、原理、方案

一、模块化概念

将一个复杂的程序依据一定的规则(规范)封装成几个块(文件), 并进行组合在一起;

块的内部数据与实现是私有的, 只是向外部暴露一些接口(方法)与外部其它模块通信。

二、模块化作用

为什么要用模块化的JavaScript?

因为在实际的开发过程中,经常会遇到变量、函数、对象等名字的冲突,这样就容易造成冲突,还会造成全局变量被污染;

同时,程序复杂时需要写很多代码,而且还要引入很多类库,这样稍微不注意就容易造成文件依赖混乱;

为了解决上面的的问题,我们才开始使用模块化的JS,所以说模块化的作用就是:

1、避免全局变量被污染

2、便于代码编写和维护

三、模块化历程

1、普通写法(全局函数及变量)

其实只要是不同的函数或变量放一起就是简单的模块,这样弊端很明显,就是变量容易被污染;

2、对象封装

将整个模块放在一个对象里面,外部访问时直接调用对象的属性或者方法就行

这种方法虽然解决了变量冲突问题,但是容易被外部随意修改:

3、匿名函数方式

如果把变量name移除,此时再访问就访问不了,结果为undefined,这样就实现了变量不被随意修改的问题,即:

匿名函数方式基本上解决了函数污染及变量随意被修改问题,这个也是模块化规范的基石!

四、模块化方案

根据匿名函数自调用的方式,同时为了增强代码依赖性,现在大部分JavaScript运行环境都有自己的模块化规范;

可以分为:CommonJS、AMD、CMD、ES6 module四大类

1、CommonJS

在node环境下使用,不支持浏览器环境

NodeJS遵循的规范

使用require()进行引入依赖

使用exports进行暴露模块

2、AMD

浏览器环境下的异步加载模块

RequireJS遵循的规范

依赖于require.js模块管理工具库

AMD 推崇依赖前置

3、CMD

浏览器环境下,同时支持异步和同步加载

SeaJS遵循的规范

CMD 推崇依赖就近

4、ES6 module

ES6模块化语法在编译时就能确定模块的依赖关系,还能确定好输入输出的变量声明,已经不仅仅是模块规范,现在已经作为JS语言的标准语法使用,有以下特性:

浏览器环境、服务器环境都支持

编译时就能确定模块的依赖关系及变量,其他模块规范都是在运行时确定的

export命令用于规定模块的对外接口

import命令用于输入其他模块提供的功能

这里补充一点:ES5版本的模块化方案,仅在语言的层面上实现了模块化,缺点在于无法直接运行在大部分 JavaScript 运行环境下,必须通过构建工具转换成标准的 ES5 后才能正常运行,这里就需要使用自动化构建工具 webpack。关于webpack这里就不多讲了,以后会专门讲解!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200219A0LRUU00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券