es6 export和export default的区别
相同点
export与export default均可用于导出常量、函数、文件、模块- 可在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用
不同点
一、在一个文件或模块中,export、import 可以有多个,export default 仅有一个
//model.js
let e1='export 1';
let e2='export 2';
let e3='export 3';
let e4='export 4';
export {e2};
export {e3};
export {e4};
export default e1;
//使用模块的index.js
import e1, {e2, e3, e4} from "./model";
console.log(e1);
console.log(e2);
console.log(e3);
console.log(e4);
#index.js运行结果
export 1
export 2
export 3
export 4
如果在 model.js 再添加一个
export default
//model.js
let e5='export e5';
export default e5
#运行结果
SyntaxError: .../model.js:
Only one default export allowed per module. (10:0)
9 | let e5='export e5';
> 10 | export default e5
二、模块中通过 export 导出的(属性或者方法)可以修改,但是通过 export default 导出的不可以修改
//model.js
let e1='export 1';
let e2='export 2';
export {e2};
export default e1;
e1='export 1 modified';
e2='export 2 modified';
//index.js
import e1, {e2}from "./model";
console.log(e1);
console.log(e2);
#index.js执行结果
export 1
export 2 modified
首先需要了解到:
ES6中模块通过 export 和 export default 暴露出来的属性或者方式并不是普通的赋值或者引用,它们是对模块内部定义的标志符类似指针的绑定。
对于一个导出的属性或者方法,在什么地方导出不重要,在什么时候导入也不重要,重要的是:访问这这个绑定的时候的当前值。
//model.js
let e1='export 1';
let e2='export 2';
export {e2};
export default e1;
e1='export 1 modified';
setTimeout(()=>{
e2='export 2 modified';
},1000);
//index.js
import e1, {e2}from "./model";
console.log(e1);
console.log(e2);
setTimeout(()=>{
console.log('later',e2)
},5000);
//index.js执行结果
export 1
export 2
later export 2 modified
但是,export 是绑定到标识符,改变标志符的值,然后访问这个绑定,得到的是新值;
export default 绑定的是标志符指向的值,如果修改标志符指向另一个值,这个绑定的值不会发生变化。
如果想修改默认导出的值,可以使用 export {e1 as default} 这种方法。
//model.js修改
export {e1 as default}
#index.js执行结果
export 1 modified
export 2
later export 2 modified
三、export default 与 export 语法差异。
export var e1='...' 是合法语句,但是 export default var e2='...' 是不合法的(let 和 const 也一样)。
export default 可以直接添加标识符导出,例如 export default e2;
export 如果要导出已经声明的表示符,必须使用 {},例如 export {e1},注意:这里 {} 不是声明一个对象。
模块导出的属性或者方法只能在模块内部修改,不能在导入模块的地方修改。
https://blog.csdn.net/ZYC88888/article/details/82501791
https://juejin.cn/post/6844903585805762573
es6 export和export default的区别的更多相关文章
- JavaScript ES6中export及export default的区别
相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...
- Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别
1.module.exports module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...
- ES6中export及export default的区别
相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...
- ES6中export与export default的区别
首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...
- es6中export和export default的区别
export与export default均可用于导出常量.函数.文件.模块 你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用 ...
- JavaScript ES6中export及export default的区别以及import的用法
本文原创地址链接:http://blog.csdn.net/zhou_xiao_cheng/article/details/52759632,未经博主允许不得转载. 相信很多人都使用过export.e ...
- es6 export 和 export default区别
相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...
- JavaScript ES6中export、export default、import用法和区别
相信熟悉JS ES6的同学都知道export.export default是导出,import是导入的意思. 那么问题就来了, 1.import 导入要怎么用? 2.export.export def ...
- es6 export及export default 的使用 及 区别
首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...
- [ES6]import 与export的用法 ,export 与export default 的 区别 以及用法
一.import 与export export(导出):用于对外输出本模块(一个文件可以理解为一个模块)变量的接口: import(导入):用于在一个模块中加载另一个含有export接口的模块. 1. ...
随机推荐
- Qt编写物联网管理平台50-超强跨平台
一.前言 跨平台的需求,除了是用户的需求外,也是为了适应日益增长的国产操作系统的发展的需要,当前国产操作系统发展的如火如荼,100%都是围绕linux系统展开,说的好听点就是站在巨人的肩膀上开发,不好 ...
- [转]升级/重装win10系统--提示无法验证密钥的解决办法
在由win7系统升级到win10时,出现了无法验证密钥的问题(还未提示输入密钥的时候就直接提示无法验证密钥),英文版报错为:Windows 10 setup has failed to validat ...
- 开源 Material Design WPF UI 控件库,易用且功能强大
前言 Material Design 是由 Google 开发的一套设计指南,提供统一的设计语言,使用户界面更加直观.美观和一致. Material Design In XAML Toolkit 是一 ...
- C#轻松实现条形码二维码生成及识别
一.前言 大家好!我是付工. 今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码. 二.http://ZXing.Net 实现二维码生成的库有很多,我们这里采用的是http://ZXing. ...
- MAC安装redis的简单方法
part 1:安装redis1.官网下载压缩包https://redis.io/download or brew install redis(太慢了-)我此处选的法一,先去官网上下载包,在解压使用. ...
- Db4o数据库-其它存储
面向对象的数据库db4o: 初识db4o 2021-01-11 23:18:34 阅读数 9211 收藏 0 前言 业界对持久存储领域的追求从未停止过,为了更方便.更容易地用对象表达我们的思维,开源领 ...
- w3cschool-JUnit测试框架
什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以下任意两种结合: Ecli ...
- CentOS扩容boot分区并升级内核
本文作者CVE-柠檬i:https://www.cnblogs.com/CVE-Lemon 前言 由于安装k8s需要升级内核,但我自己的的boot分区只有200M大小,无法安装新内核,所以干脆把swa ...
- 接口(interface):实例化时要覆盖所有抽象方法,否则仍为抽象类
概述 /* * 接口的使用 * 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能定义全局 ...
- law Intermediate walkthrough pg
靶场很简单分数只有10分跟平常做的20分的中级靶场比确实简单 我拿来放松的 算下来30分钟解决战斗 nmap 扫到80端口web界面 是个框架 搜exp https://www.exploit-db. ...