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 相关文章推荐
JavaScript单元测试ABC
Apr 12 Javascript
非html5实现js版弹球游戏示例代码
Sep 22 Javascript
JQuery.get提交页面不跳转的解决方法
Jan 13 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
headjs实现网站并行加载但顺序执行JS
Nov 29 Javascript
扩展bootstrap的modal模态框-动态添加modal框-弹出多个modal框
Feb 21 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
May 02 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
Electron-vue脚手架改造vue项目的方法
Oct 22 Javascript
json解析大全 双引号、键值对不在一起的情况
Dec 06 Javascript
JS闭包原理及其使用场景解析
Dec 03 Javascript
Vue通过懒加载提升页面响应速度
May 10 Vue.js
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调用Oracle存储过程
2006/10/09 PHP
php set_time_limit(0) 设置程序执行时间的函数
2010/05/26 PHP
php格式化json函数示例代码
2016/05/12 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
Javascript中的数学函数集合
2007/05/08 Javascript
javascript parseInt 函数分析(转)
2009/03/21 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
JavaScript中使用concat()方法拼接字符串的教程
2015/06/06 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
详解JavaScript的AngularJS框架中的作用域与数据绑定
2016/03/04 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
微信小程序swiper左右扩展各显示一半代码实例
2019/12/05 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
openlayers实现地图弹窗
2020/09/25 Javascript
[00:37]2016完美“圣”典风云人物:AMS宣传片
2016/12/06 DOTA
Python判断操作系统类型代码分享
2014/11/22 Python
在Python中使用dict和set方法的教程
2015/04/27 Python
python单元测试unittest实例详解
2015/05/11 Python
Python实现树的先序、中序、后序排序算法示例
2017/06/23 Python
Python 判断 有向图 是否有环的实例讲解
2018/02/01 Python
对Python中type打开文件的方式介绍
2018/04/28 Python
Python3 tkinter 实现文件读取及保存功能
2019/09/12 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
大学生个人求职信
2014/06/02 职场文书
旅游活动总结
2014/08/27 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
关于车尾的标语大全
2015/08/11 职场文书
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS
Elasticsearch Recovery 详细介绍
2022/04/19 Java/Android
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android