ES6使用export和import实现模块化的方法


Posted in Javascript onSeptember 10, 2018

在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库,  而像seaJS是基于CMD规范的模块化库,  两者都是为了为了推广前端模块化的工具, 更多有关AMD和CMD的区别, 后面参考给了几个链接;

现在ES6自带了模块化, 也是JS第一次支持module, 在很久以后 ,我们可以直接作用import和export在浏览器中导入和导出各个模块了, 一个js文件代表一个js模块;

现代浏览器对模块(module)支持程度不同, 目前都是使用babelJS, 或者Traceur把ES6代码转化为兼容ES5版本的js代码;

前端模块化

1. 模块化的好处

前后端分离以来,经常提到前端工程化,前端工程化是一个高层次的思想,前端工程化主要包括四个方面:模块化、组件化、规范化、自动化。而模块化和组件化是为工程化思想下相对较具体的开发方式,因此可以简单的认为模块化和组件化是工程化的表现形式。

模块化带来的好处:

   1 避免变量污染,命名冲突
   2 提高代码复用率
   3 提高维护性
   4 依赖关系的管理

2. 什么是模块化?

那具体什么是模块化呢,还是举简单的例子,我们要写一个实现A功能的JS代码,这个功能在项目其他位置也需要用到,那么我们就可以把这个功能看成一个模块采用一定的方式进行模块化编写,既能实现复用还可以分而治之,同理在写样式的时候,如果我们需要某种特殊的样式,会在很多地方应用,那么我们也可以采用一定的方式进行CSS的模块化,具体说来,JS模块化方案很多有AMD/CommonJS/UMD/ES6 Module等,CSS模块化开发大多是在less、sass、stylus等预处理器的import/mixin特性支持下实现的,具体技术大家自行学习。

3. 没有ES6模块化之前是怎么表达模块化的?

在ES6前, 前端就使用RequireJS或者seaJS实现模块化, requireJS是基于AMD规范的模块化库, 而像seaJS是基于CMD规范的模块化库, 两者都是为了为了推广前端模块化的工具

4. ES6的模块化

现在ES6自带了模块化, 也是JS第一次支持module,我们可以直接作用import和export在浏览器中导入和导出各个模块了, 一个js文件代表一个js模块;

ES6的模块化的基本规则或特点:

1:每一个模块只加载一次,每一个JS只执行一次,如果下次再去加载同目录下同文件,直接从内存中读取。

2:每一个模块内声明的变量都是局部变量, 不会污染全局作用域;

3:模块内部的变量或者函数可以通过export导出;

4:一个模块可以导入别的模块

5:ES6的模块自动采用严格模式

6:模块顶级作用域的this值为undefined

7:需要外部使用的部分,必须导出才可以

5.实际应用

// 普通的使用
  export var a = '1'
  export function sum(num1,num2){
    return num1+num2
  }
  
  import a from './a.js'
  import {sum} from './sum.js'
// 重命名导出与导入
  function sum(num1,num2){
    return num1+num2
  }
  export {sum as add}
  
  import {add as sum} from './sum.js'
  
// 模块的默认值

  export default function(num1,num2) {
    return num1 + num2
  }
  
// 在script标签中使用模块

  <script type="module" src="module.js"></script>
  <script type="module">
  import a from '../b.js'
  </script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
提高代码性能技巧谈—以创建千行表格为例
Jul 01 Javascript
DHTML Slide Show script图片轮换
Mar 03 Javascript
JavaScript的变量作用域深入理解
Oct 25 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
ff下JQuery无法监听input的keyup事件的解决方法
Dec 12 Javascript
jquery 实现输入邮箱时自动补全下拉提示功能
Oct 04 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
AngularJS 单选框及多选框的双向动态绑定
Apr 20 Javascript
详解 vue better-scroll滚动插件排坑
Feb 08 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
vue 通过base64实现图片下载功能
Dec 19 Vue.js
Vuejs 实现简易 todoList 功能 与 组件实例代码
Sep 10 #Javascript
浅谈微信小程序flex布局基础
Sep 10 #Javascript
微信小程序文章详情页面实现代码
Sep 10 #Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
Sep 10 #Javascript
JavaScript读写二进制数据的方法详解
Sep 09 #Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
Sep 08 #Javascript
在vue项目中集成graphql(vue-ApolloClient)
Sep 08 #Javascript
You might like
细谈php中SQL注入攻击与XSS攻击
2012/06/10 PHP
php中CI操作多个数据库的代码
2012/07/05 PHP
Linux下安装oracle客户端并配置php5.3
2014/10/12 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
聊聊 PHP 8 新特性 Attributes
2020/08/19 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
2012/02/03 Javascript
阻止子元素继承父元素事件具体思路及实现
2013/05/02 Javascript
javascript预加载图片、css、js的方法示例介绍
2013/10/14 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
Easyui 之 Treegrid 笔记
2016/04/29 Javascript
JS与HTML结合使用marquee标签实现无缝滚动效果代码
2016/07/05 Javascript
jQuery简单设置文本框回车事件的方法
2016/08/01 Javascript
seajs模块之间依赖的加载以及模块的执行
2016/10/21 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
Python输出9*9乘法表的方法
2015/05/25 Python
python正则实现提取电话功能
2018/02/24 Python
对Python中gensim库word2vec的使用详解
2018/05/08 Python
对pandas数据判断是否为NaN值的方法详解
2018/11/06 Python
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
会计专业应届生求职信
2013/11/24 职场文书
承办会议欢迎词
2014/01/17 职场文书
竞选部长演讲稿
2014/04/26 职场文书
竞选班委演讲稿
2014/04/28 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
税务会计岗位职责
2015/04/02 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
《活见鬼》教学反思
2016/02/24 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android