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 相关文章推荐
使用prototype.js进行异步操作
Feb 07 Javascript
js下通过getList函数实现分页效果的代码
Sep 17 Javascript
jQuery初学:find()方法及children方法的区别分析
Jan 31 Javascript
JavaScript判断数组是否存在key的简单实例
Aug 03 Javascript
javascript九宫格图片随机打乱位置的实现方法
Mar 15 Javascript
JS实现移动端实时监听输入框变化的实例代码
Apr 12 Javascript
vue表单绑定实现多选框和下拉列表的实例
Aug 12 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
Bootstrap实现可折叠分组侧边导航菜单
Mar 07 Javascript
vue实现城市列表选择功能
Jul 16 Javascript
JavaScript引用类型Array实例分析
Jul 24 Javascript
WebWorker 封装 JavaScript 沙箱详情
Nov 02 Javascript
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利用cookie实现访问次数统计代码
2011/05/19 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
PHP数据库操作二:memcache用法分析
2017/08/16 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
JS代码判断IE6,IE7,IE8,IE9的函数代码
2013/08/02 Javascript
理解Javascript闭包
2013/11/01 Javascript
JavaScript中判断原生函数检查function是否是原生代码
2014/09/09 Javascript
详解Document.Cookie
2015/12/25 Javascript
深入理解node exports和module.exports区别
2016/06/01 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
[js高手之路]设计模式系列课程-发布者,订阅者重构购物车的实例
2017/08/29 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
关于node-bindings无法在Electron中使用的解决办法
2018/12/18 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
[27:39]Ti4 循环赛第二日 LGD vs Fnatic
2014/07/11 DOTA
python之Character string(实例讲解)
2017/09/25 Python
Linux下python制作名片示例
2018/07/20 Python
PyQtGraph在pyqt中的应用及安装过程
2019/08/04 Python
python文字转语音实现过程解析
2019/11/12 Python
Python字符编码转码之GBK,UTF8互转
2020/02/09 Python
python正则过滤字母、中文、数字及特殊字符方法详解
2020/02/11 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
亚洲领先的设计购物网站:Pinkoi
2020/11/26 全球购物
C++如何引用一个已经定义过的全局变量
2014/08/25 面试题
网络方面基础面试题
2012/11/16 面试题
如何开发一个JQuery插件
2016/07/28 面试题
《长城和运河》教学反思
2014/04/14 职场文书
作风建设剖析材料
2014/10/06 职场文书
诉讼和解协议书
2016/03/23 职场文书
2019销售早会主持词
2019/06/27 职场文书
浅谈Python 中的复数问题
2021/05/19 Python
Java Optional<Foo>转换成List<Bar>的实例方法
2021/06/20 Java/Android
Centos系统通过Docker安装并搭建MongoDB数据库
2022/04/12 MongoDB