美文网首页
JavaScript (module)体系

JavaScript (module)体系

作者: 小唱同学 | 来源:发表于2019-08-16 19:00 被阅读0次
    模块功能主要由两个命令构成:export和import。

    export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
    import命令具有提升效果,会提升到整个模块的头部,首先执行。

    导入的名字必须和导出的名字相同,不一样会报错;导出的时候要有大括号,导入也要有大括号
    • export命令 常规导出
      一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里面使用export命令输出变量。
      可以输出函数,变量,对象等
    var firstName = 'Michael';
    var lastName = 'Jackson';
    var year = 1958;
    
    export { firstName, lastName, year };
    
    • import命令 常规导入
      使用export命令定义了模块的对外接口以后,其他 JS 文件就可以通过import命令加载这个模块。
    // main.js
    import { firstName, lastName, year } from './profile.js';
    function setName(element) {
      element.textContent = firstName + ' ' + lastName;
    }
    
    
    • 模块的整体加载
    export function area(radius) {
      return Math.PI * radius * radius;
    }
    
    export function circumference(radius) {
      return 2 * Math.PI * radius;
    }
    

    现在,加载这个模块。

    import { area, circumference } from './circle';
    
    console.log('圆面积:' + area(4));
    console.log('圆周长:' + circumference(14));
    

    export default 命令 默认export
    // export-default.js
    export default function () {
      console.log('foo');
    }
    

    上面代码是一个模块文件export-default.js,它的默认输出是一个函数。
    其他模块加载该模块时,import命令可以为该匿名函数指定任意名字。

    import customName from './export-default';
    customName(); // 'foo'
    

    上面代码的import命令,可以用任意名称指向export-default.js输出的方法,这时就不需要知道原模块输出的函数名。需要注意的是,这时import命令后面,不使用大括号。

    下面比较一下默认输出和正常输出。

    // 第一组
    export default function crc32() { // 输出
      // ...
    }
    
    import crc32 from 'crc32'; // 输入
    
    // 第二组
    export function crc32() { // 输出
      // ...
    };
    
    import {crc32} from 'crc32'; // 输入
    

    上面代码的两组写法,第一组是使用export default时,对应的import语句不需要使用大括号;第二组是不使用export default时,对应的import语句需要使用大括号。

    export default命令用于指定模块的默认输出。显然,一个模块只能有一个默认输出,因此export default命令只能使用一次。所以,import命令后面才不用加大括号,因为只可能唯一对应export default命令。

    export 与 import 的复合写法

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

    export { foo, bar } from 'my_module';
    
    // 可以简单理解为
    import { foo, bar } from 'my_module';
    export { foo, bar };
    

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

    相关文章

      网友评论

          本文标题:JavaScript (module)体系

          本文链接:https://www.haomeiwen.com/subject/wleqsctx.html