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 相关文章推荐
JQuery动画与特效实例分析
Feb 02 Javascript
javascript基本算法汇总
Mar 09 Javascript
js实现开启密码大写提示
Dec 21 Javascript
解决微信内置浏览器返回上一页强制刷新问题方法
Feb 05 Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 Javascript
js实现数组去重方法及效率?Ρ? target=
Feb 14 Javascript
JQuery中Ajax的操作完整例子
Mar 07 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 Javascript
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
微信小程序日历插件代码实例
Dec 04 Javascript
JS精确判断数据类型代码实例
Dec 18 Javascript
uni-app如何实现增量更新功能
Jan 03 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使用PDO方法详解
2014/12/27 PHP
PHP微信公众号自动发送红包API
2016/06/01 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
用 JSON 处理缓存
2007/04/27 Javascript
javascript 写的一个简单的timer
2009/07/30 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
JS获取当前日期时间并定时刷新示例
2021/03/04 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
Javascript 是你的高阶函数(高级应用)
2015/06/15 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
JS前端开发判断是否是手机端并跳转操作(小结)
2017/02/05 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
js实现旋转木马效果
2017/03/17 Javascript
微信小程序模板和模块化用法实例分析
2017/11/28 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
在移动端使用vue-router和keep-alive的方法示例
2018/12/02 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
[00:32]2018DOTA2亚洲邀请赛Secret出场
2018/04/03 DOTA
[51:00]Secret vs VGJ.S 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python字典排序实例详解
2015/05/20 Python
Python实现备份MySQL数据库的方法示例
2018/01/11 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
衰败城市英国官网:Urban Decay英国
2020/04/29 全球购物
安全检查验收制度
2014/01/12 职场文书
《落花生》教学反思
2014/02/25 职场文书
2014年幼儿园教学工作总结
2014/12/04 职场文书
2015年元旦标语大全
2014/12/09 职场文书
新人入职感言
2015/07/31 职场文书
幼儿园小班教师随笔
2015/08/14 职场文书
简单且有用的Python数据分析和机器学习代码
2021/07/02 Python
python中的3种定义类方法
2021/11/27 Python
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js