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 相关文章推荐
form.submit()不能提交表单的错误原因及解决方法
Oct 13 Javascript
PHP+jQuery+Ajax实现多图片上传效果
Mar 14 Javascript
jquery不常用方法汇总
Jul 26 Javascript
jQuery多级手风琴菜单实例讲解
Oct 22 Javascript
当jquery ajax遇上401请求的解决方法
May 19 Javascript
js获取当前时间(昨天、今天、明天)
Nov 23 Javascript
jQuery插件开发发送短信倒计时功能代码
May 09 jQuery
Flask中获取小程序Request数据的两种方法
May 12 Javascript
重新认识vue之事件阻止冒泡的实现
Aug 02 Javascript
详解如何创建并发布一个 vue 组件
Nov 08 Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 Javascript
vue prop属性传值与传引用示例
Nov 13 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跨站攻击实例分析
2014/10/28 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
php格式化电话号码的方法
2015/04/24 PHP
PHP goto语句用法实例
2019/08/06 PHP
关于javascript document.createDocumentFragment()
2009/04/04 Javascript
JavaScript 动态改变图片大小
2009/06/11 Javascript
jQuery回车实现登录简单实现
2013/08/20 Javascript
javascript页面动态显示时间变化示例代码
2013/12/18 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
vue element upload实现图片本地预览
2019/08/20 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
[01:30:15]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第二场 2月2日
2021/03/11 DOTA
Python爬虫模拟登录带验证码网站
2016/01/22 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python全栈要学什么 python全栈学习路线
2019/06/28 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
button在IE6/7下的黑边去除方案
2012/12/24 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
CSS3打造百度贴吧的3D翻牌效果示例
2017/01/04 HTML / CSS
详解HTML5 window.postMessage与跨域
2017/05/11 HTML / CSS
世界上最好的旅行夹克:BauBax
2018/12/23 全球购物
比利时家具购买网站:Home24
2019/01/03 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
犯错检讨书
2014/02/21 职场文书
家长写给老师的建议书
2014/03/13 职场文书
教师工作失职检讨书
2014/09/18 职场文书
浅谈Python协程asyncio
2021/06/20 Python
详解Python+OpenCV进行基础的图像操作
2022/02/15 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python
Go 中的空白标识符下划线
2022/03/25 Golang