ES6模块化的import和export用法方法总结


Posted in Javascript onAugust 08, 2017

ES6之前已经出现了js模块加载的方案,最主要的是CommonJS和AMD规范。commonjs主要应用于服务器,实现同步加载,如nodejs。AMD规范应用于浏览器,如requirejs,为异步加载。同时还有CMD规范,为同步加载方案如seaJS。

ES6在语言规格的层面上,实现了模块功能,而且实现得相当简单,完全可以取代现有的CommonJS和AMD规范,成为浏览器和服务器通用的模块解决方案。

ES6模块主要有两个功能:export和import

export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口

import用于在一个模块中加载另一个含有export接口的模块。

也就是说使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。如下图(假设a和b文件在同一目录下)

// a.js

var sex="boy";
var echo=function(value){
console.log(value)
}
export {sex,echo} 
//通过向大括号中添加sex,echo变量并且export输出,就可以将对应变量值以sex、echo变量标识符形式暴露给其他文件而被读取到
//不能写成export sex这样的方式,如果这样就相当于export "boy",外部文件就获取不到该文件的内部变量sex的值,因为没有对外输出变量接口,只是输出的字符串。
// b.js
通过import获取a.js文件的内部变量,{}括号内的变量来自于a.js文件export出的变量标识符。
import {sex,echo} from "./a.js" 
console.log(sex)  // boy
echo(sex) // boy

a.js文件也可以按如下export语法写,但不如上边直观,不太推荐。

// a.js
export var sex="boy";
export var echo=function(value){
console.log(value)
}

//因为function echo(){}等价于 var echo=function(){}所以也可以写成
export function echo(value){

 console.log(value)
}

以上是export与module的基本用法,再进行拓展学习

前面的例子可以看出,b.js使用import命令的时候,用户需要知道a.js所暴露出的变量标识符,否则无法加载。可以使用export default命令,为模块指定默认输出,这样就不需要知道所要加载模块的变量名。

//a.js
var sex="boy";
export default sex(sex不能加大括号)
//原本直接export sex外部是无法识别的,加上default就可以了.但是一个文件内最多只能有一个export default。
其实此处相当于为sex变量值"boy"起了一个系统默认的变量名default,自然default只能有一个值,所以一个文件内不能有多个export default。
// b.js
本质上,a.js文件的export default输出一个叫做default的变量,然后系统允许你为它取任意名字。所以可以为import的模块起任何变量名,且不需要用大括号包含
import any from "./a.js"
import any12 from "./a.js" 
console.log(any,any12)  // boy,boy

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

Javascript 相关文章推荐
JQuery处理json与ajax返回JSON实例代码
Jan 03 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
May 14 Javascript
jQuery中click事件的定义和用法
Dec 20 Javascript
使用vue编写一个点击数字计时小游戏
Aug 31 Javascript
JS定时器实现数值从0到10来回变化
Dec 09 Javascript
AngularJS中的按需加载ocLazyLoad示例
Jan 11 Javascript
JavaScript ES6中export、import与export default的用法和区别
Mar 14 Javascript
angular实现spa单页面应用实例
Jul 10 Javascript
Layer+Echarts构建弹出层折线图的方法
Sep 25 Javascript
js实现二级联动简单实例
Jan 11 Javascript
Vue实现开关按钮拖拽效果
Sep 22 Javascript
Vue项目中quill-editor带样式编辑器的使用方法
Aug 08 #Javascript
webpack 2.x配置reactjs基本开发环境详解
Aug 08 #Javascript
vue-quill-editor实现图片上传功能
Aug 08 #Javascript
vue.js评论发布信息可插入QQ表情功能
Aug 08 #Javascript
vuejs使用FormData实现ajax上传图片文件
Aug 08 #Javascript
基于Vue实现支持按周切换的日历
Sep 24 #Javascript
JS中正则表达式要注意lastIndex属性
Aug 08 #Javascript
You might like
几个有用的php字符串过滤,转换函数代码
2012/05/01 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
PHP中file_put_contents追加和换行的实现方法
2017/04/01 PHP
phpmyadmin下载、安装、配置教程
2017/05/16 PHP
[原创]PHP实现SQL语句格式化功能的方法
2017/07/28 PHP
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
JS修改iframe页面背景颜色的方法
2015/04/01 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
p5.js入门教程之鼠标交互的示例
2018/03/16 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
v-slot和slot、slot-scope之间相互替换实例
2020/09/04 Javascript
在Django的session中使用User对象的方法
2015/07/23 Python
python实现多张图片拼接成大图
2019/01/15 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python使用百度api做人脸对比的方法
2019/08/28 Python
python实现对列表中的元素进行倒序打印
2019/11/23 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
python Socket网络编程实现C/S模式和P2P
2020/06/22 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
Haggar官网:美国男装品牌
2020/02/16 全球购物
阿尔卡特(中国)的面试题目
2014/08/20 面试题
后勤部经理岗位职责
2014/02/23 职场文书
工商管理专业自荐信
2014/06/03 职场文书
个人求职自荐信范文
2014/06/20 职场文书
二人合伙经营协议书
2014/09/13 职场文书
2014个人四风对照检查材料思想汇报
2014/09/18 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
2016领导干部廉洁从政心得体会
2016/01/19 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python
Mysql 如何查询时间段交集
2021/06/08 MySQL
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS