import expected(importatore)

图片授权基于 www.pixabay.com 相关协议

在创建JavaScript模块时,export 语句用于从模块中导出函数、对象或原始值,以便其他程序可以通过 import 语句使用它们。

ES6 模块是「静态装配」的,所有动态逻辑执行完后,ES6 模块就可以用来理解程序中静态代码。我理解的动态逻辑执行就是表达式执行,当所有的表达式都执行完后,只会剩下引用的名字和值,所以 ES6 导出只有「名字」和「值」,因为其他的所有东西都被执行过了嘛。
    export var js = \\\'JavaScript\\\';export function jsFn(){}export class jsClass{}
    上面的 export 导出会形成一个「名字表」,来让允许外部查看。
    如果我们只导出一个引用的名字,比如:
    export var js = \\\'JavaScript\\\';
    导出名字是可以理解的,因为「变量」名字被赋值过了。现在我导出了字符串\\”JavaScript\\”,它的导出名字是「js」。在外部是可以访问到的。但如果说我只想导出一个数字「1」,也就是说,我只导出一个「值」,它没有名字,那如何操作?
    export default 1;
    其实,ES6 模块约定了一个名为「default」的名字,用来导出当前表达式的值(result)。有了「default」这个名字,我们就可以导出没有名字的值。因为你的值,会直接绑定「default」这个名字。
    export 导出
    导出的时候就是在「名字表」里添加一个名字。
    export var x = 100;
    先在名字表添加名字 x,再把值赋值给 x 。其实和变量赋值的逻辑是一样的。
    import 导入
    先按语法在当前模块声明名字,再添加当前模块对目标模块的依赖项,根据依赖项来形成模块「依赖树」。
    依赖树,因为你的模块导入可能是多个模块相互依赖,JavaScript 要找到最顶端的「根模块」。
    导出和导入
    export 是导出一个「名字列表」,在执行顶层代码的时候,会把表达式的值赋值给变量。
    import 是引入一个「对应表」,只在词法分析中存在,import 的名字和 export 的名字是一个映射关系,加载的时候也就初始化完成了。
    被 import 导入后,名字是按常量处理,不可写的。而「default」名字虽然没有声明过,但它是以 var 的形式进行创建的。
    在 import 的时候,代码会「变量提升」到最顶部。

    推荐阅读

    JavaScript 编译原理
    JavaScript 引擎、编译器、作用域

    JavaScript 的装箱和拆箱


    参考资料
    [1]https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/export
    [2]《JavaScript核心原理解析》

    原创文章,作者:小道研究,如若转载,请注明出处:https://www.sudun.com/ask/34476.html

    (0)
    小道研究的头像小道研究
    上一篇 2024年4月13日
    下一篇 2024年4月13日

    相关推荐

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注