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 相关文章推荐
js实现局部页面打印预览原理及示例代码
Jul 03 Javascript
javascript实现博客园页面右下角返回顶部按钮
Feb 22 Javascript
jQuery实现简易的天天爱消除小游戏
Oct 16 Javascript
基于HTML5上使用iScroll实现下拉刷新,上拉加载更多
May 21 Javascript
JS中常用的输出方式(五种)
Jun 12 Javascript
AngularJS实现按钮提示与点击变色效果
Sep 07 Javascript
vue中改变选中当前项的显示隐藏或者状态的实现方法
Feb 08 Javascript
vue插件实现v-model功能
Sep 10 Javascript
vue动态改变背景图片demo分享
Sep 13 Javascript
js比较两个单独的数组或对象是否相等的实例代码
Apr 28 Javascript
使用js实现一个简单的滚动条过程解析
Sep 10 Javascript
基于 Vue 的 Electron 项目搭建过程图文详解
Jul 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
S900/ ETON E1-XM 收音机
2021/03/02 无线电
微信API接口大全
2015/04/15 PHP
基于PHP如何把汉字转化为拼音
2015/12/11 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
javascript小数四舍五入多种方法实现
2012/12/23 Javascript
解析Javascript中大括号“{}”的多义性
2013/12/02 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
详解Matlab中 sort 函数用法
2016/03/20 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
详解AngularJS2 Http服务
2017/06/26 Javascript
Vue父组件调用子组件事件方法
2018/02/23 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
2019/05/27 jQuery
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
解决vue项目中出现Invalid Host header的问题
2020/11/17 Javascript
[02:20]DOTA2中文配音宣传片
2013/05/22 DOTA
python PIL模块与随机生成中文验证码
2016/02/27 Python
python实现多线程的方式及多条命令并发执行
2016/06/07 Python
python斐波那契数列的计算方法
2018/09/27 Python
Python实现多属性排序的方法
2018/12/05 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
django 模型中的计算字段实例
2020/05/19 Python
CSS3实现任意图片lowpoly动画效果实例
2017/05/11 HTML / CSS
Yves Rocher捷克官方网站:植物化妆品的创造者
2019/07/31 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
秋季运动会通讯稿
2014/01/24 职场文书
民间个人借款协议书
2014/09/30 职场文书
Python中的变量与常量
2021/11/11 Python
Python采集壁纸并实现炫轮播
2022/04/30 Python