import和export的作用

        在es6标准发布之前,js是没有模块化的概念的,也就是说原生js是无法将一个大型程序拆分成若干相互依赖的小模块的。而es6针对这个问题提出了Module的概念,设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系,以及输入和输出的变量。

        关于静态化是指直接从指定模块取出想要的方法,其他的不加载。比如

        此时只加载fs中的stat、exists和readFile三个模块,其他的不加载。而比如CommonJS和 AMD 模块,都只能在运行时确定这些东西。也就是先加载整个fs,然后再从中找到想要的模块。

        Module模块功能主要由两个命令构成:import 和 export。

        export用于对外输出本模块(一个文件可以理解为一个模块)变量的接口,可以使用as对要输出的变量进行重命名。

        import用于在一个模块中加载另一个含有export接口的模块,可以使用as对引入的变量进行重命名。import命令具有提升效果,会提升到整个模块的头部,首先执行。如果多次重复执行同一句import语句,那么只会执行一次,而不会执行多次。

        也就是说使用export命令定义了模块的对外接口以后,其他JS文件就可以通过import命令加载这个模块(文件)。

        export 和 export default 异同:

        1、二者均用于导出常量、函数、文件、模块等;

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

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

        4、通过export方式导出,在导入时要加{ },export default则不需要。

        5、在用import引入时,如果是用export方法定义的导出,必须要知道指定的变量名。而如果使用export default定义的时候,import可以起任意的名字,这里可以理解为,用export default声明导出模块时,自动生成了一个叫default的变量,当使用import命令导入时,会自动将这个defualt变量赋值给声明的变量中。这也就解释了为什么export default仅有一个。注:export default命令其实只是输出一个叫做default的变量,所以它后面不能跟变量声明语句。

        import和export的复合写法:

        如果在一个模块之中,先输入后输出同一个模块,import语句可以与export语句写在一起。

        上面代码中,export和import语句可以结合在一起,写成一行。但需要注意的是,写成一行以后,foo和bar实际上并没有被导入当前模块,只是相当于对外转发了这两个接口,导致当前模块不能直接使用foo和bar。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    一个敲代码的前端妹子阅读 1,987评论 8 23
  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    MapleLeafFall阅读 1,204评论 0 0
  • 官方中文版原文链接 感谢社区中各位的大力支持,译者再次奉上一点点福利:阿里云产品券,享受所有官网优惠,并抽取幸运大...
    HetfieldJoe阅读 3,672评论 2 27
  • 概述 历史上,JavaScript 一直没有模块(module)体系,无法将一个大程序拆分成互相依赖的小文件,再用...
    emmet7life阅读 635评论 0 0
  • 情人节过去很久了,想起玫瑰。其实节日里我并未收到玫瑰,仅获几本书而已。翻书偶见莎翁十四行诗曰:对天生的尤物我们要求...
    妙云花花阅读 587评论 0 2