相同点

  1. exportexport default 均可用于导出常量、函数、文件、模块
  2. 可在其它文件或模块中通过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中模块通过 exportexport 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 defaultexport 语法差异。

export var e1='...' 是合法语句,但是 export default var e2='...' 是不合法的(letconst 也一样)。

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的区别的更多相关文章

  1. JavaScript ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  2. Node.js模块导出module.exports 和 exports,Es6模块导出export 和export default的区别

    1.module.exports  module变量代表当前模块.这个变量是一个对象,module对象会创建一个叫exports的属性,这个属性的默认值是一个空的对象: module.exports ...

  3. ES6中export及export default的区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  4. ES6中export与export default的区别

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  5. es6中export和export default的区别

    export与export default均可用于导出常量.函数.文件.模块 你可以在其它文件或模块中通过import+(常量 | 函数 | 文件 | 模块)名的方式,将其导入,以便能够对其进行使用 ...

  6. JavaScript ES6中export及export default的区别以及import的用法

    本文原创地址链接:http://blog.csdn.net/zhou_xiao_cheng/article/details/52759632,未经博主允许不得转载. 相信很多人都使用过export.e ...

  7. es6 export 和 export default区别

    相信很多人都使用过export.export default.import,然而它们到底有什么区别呢? 在JavaScript ES6中,export与export default均可用于导出常量.函 ...

  8. JavaScript ES6中export、export default、import用法和区别

    相信熟悉JS ES6的同学都知道export.export default是导出,import是导入的意思. 那么问题就来了, 1.import 导入要怎么用? 2.export.export def ...

  9. es6 export及export default 的使用 及 区别

    首先要知道export,import ,export default是什么 ES6模块主要有两个功能:export和importexport用于对外输出本模块(一个文件可以理解为一个模块)变量的接口i ...

  10. [ES6]import 与export的用法 ,export 与export default 的 区别 以及用法

    一.import 与export export(导出):用于对外输出本模块(一个文件可以理解为一个模块)变量的接口: import(导入):用于在一个模块中加载另一个含有export接口的模块. 1. ...

随机推荐

  1. Qt编写物联网管理平台50-超强跨平台

    一.前言 跨平台的需求,除了是用户的需求外,也是为了适应日益增长的国产操作系统的发展的需要,当前国产操作系统发展的如火如荼,100%都是围绕linux系统展开,说的好听点就是站在巨人的肩膀上开发,不好 ...

  2. [转]升级/重装win10系统--提示无法验证密钥的解决办法

    在由win7系统升级到win10时,出现了无法验证密钥的问题(还未提示输入密钥的时候就直接提示无法验证密钥),英文版报错为:Windows 10 setup has failed to validat ...

  3. 开源 Material Design WPF UI 控件库,易用且功能强大

    前言 Material Design 是由 Google 开发的一套设计指南,提供统一的设计语言,使用户界面更加直观.美观和一致. Material Design In XAML Toolkit 是一 ...

  4. C#轻松实现条形码二维码生成及识别

    一.前言 大家好!我是付工. 今天给大家分享一下,如何基于C#来生成并识别条形码或者二维码. 二.http://ZXing.Net 实现二维码生成的库有很多,我们这里采用的是http://ZXing. ...

  5. MAC安装redis的简单方法

    part 1:安装redis1.官网下载压缩包https://redis.io/download or brew install redis(太慢了-)我此处选的法一,先去官网上下载包,在解压使用. ...

  6. Db4o数据库-其它存储

    面向对象的数据库db4o: 初识db4o 2021-01-11 23:18:34 阅读数 9211 收藏 0 前言 业界对持久存储领域的追求从未停止过,为了更方便.更容易地用对象表达我们的思维,开源领 ...

  7. w3cschool-JUnit测试框架

    什么是 Junit 测试框架? JUnit 是一个回归测试框架,被开发者用于实施对应用程序的单元测试,加快程序编制速度,同时提高编码的质量.JUnit 测试框架能够轻松完成以下任意两种结合: Ecli ...

  8. CentOS扩容boot分区并升级内核

    本文作者CVE-柠檬i:https://www.cnblogs.com/CVE-Lemon 前言 由于安装k8s需要升级内核,但我自己的的boot分区只有200M大小,无法安装新内核,所以干脆把swa ...

  9. 接口(interface):实例化时要覆盖所有抽象方法,否则仍为抽象类

    概述 /* * 接口的使用 * 1.接口使用interface来定义 * 2.Java中,接口和类是并列的两个结构 * 3.如何定义接口:定义接口中的成员 * * 3.1 JDK7及以前:只能定义全局 ...

  10. law Intermediate walkthrough pg

    靶场很简单分数只有10分跟平常做的20分的中级靶场比确实简单 我拿来放松的 算下来30分钟解决战斗 nmap 扫到80端口web界面 是个框架 搜exp https://www.exploit-db. ...