• es6 export和export default的区别


    相同点

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

    不同点

    一、在一个文件或模块中,export、import 可以有多个,export default 仅有一个

    1. //model.js
    2. let e1='export 1';
    3. let e2='export 2';
    4. let e3='export 3';
    5. let e4='export 4';
    6. export {e2};
    7. export {e3};
    8. export {e4};
    9. export default e1;
    1. //使用模块的index.js
    2. import e1, {e2, e3, e4} from "./model";
    3. console.log(e1);
    4. console.log(e2);
    5. console.log(e3);
    6. console.log(e4);
    1. #index.js运行结果
    2. export 1
    3. export 2
    4. export 3
    5. export 4

    如果在 model.js 再添加一个 export default

    1. //model.js
    2. let e5='export e5';
    3. export default e5
    1. #运行结果
    2. SyntaxError: .../model.js:
    3. Only one default export allowed per module. (10:0)
    4. 9 | let e5='export e5';
    5. > 10 | export default e5

    二、模块中通过 export 导出的(属性或者方法)可以修改,但是通过 export default 导出的不可以修改

    1. //model.js
    2. let e1='export 1';
    3. let e2='export 2';
    4. export {e2};
    5. export default e1;
    6. e1='export 1 modified';
    7. e2='export 2 modified';
    1. //index.js
    2. import e1, {e2}from "./model";
    3. console.log(e1);
    4. console.log(e2);
    1. #index.js执行结果
    2. export 1
    3. export 2 modified

    首先需要了解到:

    ES6中模块通过 exportexport default 暴露出来的属性或者方式并不是普通的赋值或者引用,它们是对模块内部定义的标志符类似指针的绑定。
    对于一个导出的属性或者方法,在什么地方导出不重要,在什么时候导入也不重要,重要的是:访问这这个绑定的时候的当前值

    1. //model.js
    2. let e1='export 1';
    3. let e2='export 2';
    4. export {e2};
    5. export default e1;
    6. e1='export 1 modified';
    7. setTimeout(()=>{
    8. e2='export 2 modified';
    9. },1000);
    1. //index.js
    2. import e1, {e2}from "./model";
    3. console.log(e1);
    4. console.log(e2);
    5. setTimeout(()=>{
    6. console.log('later',e2)
    7. },5000);
    1. //index.js执行结果
    2. export 1
    3. export 2
    4. later export 2 modified

    但是,export 是绑定到标识符,改变标志符的值,然后访问这个绑定,得到的是新值;export default 绑定的是标志符指向的值,如果修改标志符指向另一个值,这个绑定的值不会发生变化。
    如果想修改默认导出的值,可以使用 export {e1 as default} 这种方法。

    1. //model.js修改
    2. export {e1 as default}
    1. #index.js执行结果
    2. export 1 modified
    3. export 2
    4. 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/82501791https://juejin.cn/post/6844903585805762573

  • 相关阅读:
    【Vue基本功】权限路由(1)
    性能测试之性能监控和性能优化
    30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软
    C++之IO流
    科研TCO-PEG-Chondroitin sulfate;TCO-PEG-CS;反式环辛烯-聚乙二醇-硫酸软骨素
    华为数据库工程师面试题目
    小程序开发二:模板和数据绑定语法以及 json 文件配置
    企业场景排行榜简介: 现实世界用例排行榜
    Redis最快速入门,一篇搞定(超详细)
    qml GroupBox用法介绍
  • 原文地址:https://blog.csdn.net/Guzarish/article/details/126141516