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从头学起(基本数据类型和引用类型的参数传递详细分析)
Feb 16 Javascript
Javascript中Event属性搜集整理
Sep 17 Javascript
js获取url中指定参数值的示例代码
Dec 14 Javascript
js正则表达式中test,exec,match方法的区别说明
Jan 29 Javascript
jquery关于事件冒泡和事件委托的技巧及阻止与允许事件冒泡的三种实现方法
Nov 27 Javascript
Webpack 实现 AngularJS 的延迟加载
Mar 02 Javascript
js 轮播效果实例分享
Dec 28 Javascript
深入理解vue中的$set
Jun 01 Javascript
解决node修改后需频繁手动重启的问题
May 13 Javascript
深入了解query和params的使用区别
Jun 24 Javascript
vue抽出组件并传值实例
Jul 31 Javascript
openLayer4实现动态改变标注图标
Aug 17 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
linux下 C语言对 php 扩展
2008/12/14 PHP
PHP学习笔记 用户注册模块用户类以及验证码类
2011/09/20 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
php json_encode与json_decode详解及实例
2016/12/13 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
PHP面向对象程序设计继承用法简单示例
2018/12/28 PHP
JQuery Highcharts 动态生成图表的方法
2013/11/15 Javascript
innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
2015/03/13 Javascript
Js实现简单的小球运动特效
2016/02/18 Javascript
jQuery实现的浮动层div浏览器居中显示效果
2017/02/03 Javascript
vue实现点击展开点击收起效果
2018/04/27 Javascript
微信小程序 slot踩坑的解决
2019/04/01 Javascript
axios如何利用promise无痛刷新token的实现方法
2019/08/27 Javascript
用Nodejs实现在终端中炒股的实现
2020/10/18 NodeJs
nuxt.js写项目时增加错误提示页面操作
2020/11/05 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
[39:19]完美世界DOTA2联赛PWL S2 SZ vs LBZS 第二场 11.26
2020/11/30 DOTA
Python抓取电影天堂电影信息的代码
2016/04/07 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
在python中使用nohup命令说明
2020/04/16 Python
tensorflow从ckpt和从.pb文件读取变量的值方式
2020/05/26 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
canvas像素画板的实现代码
2018/11/21 HTML / CSS
企业总经理岗位职责
2014/02/13 职场文书
美术指导助理求职信
2014/04/20 职场文书
幼儿评语大全
2014/04/30 职场文书
教师节演讲稿
2014/05/06 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
汽车销售合同文本
2019/08/08 职场文书
redis 存储对象的方法对比分析
2021/08/02 Redis
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS