module

作者: keknei | 来源:发表于2017-12-25 02:59 被阅读8次

    export命令

    常用的三种方式
    第一种方式,可以直接导出变量,函数,class

    //a.js
    export let name="张三丰";
    export let age=123;
    export function getName(){
      return name;
    }
    export class Person{}
    

    第二种方式,直接用大括号包起来倒出去

    let name="张三丰";
    let age=123;
    function getName(){
      return name;
    }
    export {name,age,getName};
    

    第三种方式 ,让输出的变量重命名

    let name="张三丰";
    let age=123;
    function getName(){
      return name;
    }
    setTimeout(()=>{
      age=18;
    });
    export {name as xingming,age as nianling,getName as getXingmign};
    

    export语句输出的接口,与其对应的值是动态绑定关系,即通过该接口,可以取到模块内部实时的值。setTimeout可以证明这个

    export对顶的是对外的接口,必须与模块内部的变量建立一一对应的关系,下面这几种都是错误的

    export 1;
    // 报错
    
    var m = 1;
    export m;
    // 报错
    

    上面两种写法都会报错,因为没有提供对外的接口。第一种写法直接输出 1,第二种写法通过变量m,还是直接输出 1。1只是一个值,不是接口。

    export default命令

    export default 在一个模块内只允许出现一次
    export可以直接导出匿名函数或者声明函数

    export default function (){
      console.log("匿名函数");
    };
    
    export default function funName(){
      console.log("有名字的函数");
    }
    

    因为export default命令其实是输出一个叫做default的变量,所以后面不能跟声明变量语句

    //错误的
    export default var a=0;
    
    //正确的
    var a=0;
    export default a;
    

    export default 输出类

    export default class{
    
    }
    

    import from命令

    1. import会提升到整个模块的头部,首先执行,所以放到那里都行,最好放到代码的头部,增加易读性
    2. 因为import是静态执行,所以不能是用表达式和变量,比如变量,表达式,if结构等,在静态分析阶段,这些语法是没有是没法得到值的,否则会报错

    import的三种常用表达形式
    第一种方式对应export的第一种方式或者第二种方式

    import {name,age,getName} from './a.js';
    

    第二种方式,让输出的变量重命名

    import {xingming as name,nianling as age,getXingmign as getName} from "./a.js";
    

    第三种方式是星号*代替大括号

    import * as person from "./a.js";
    

    对应的export default命令,变量不用加大括号

    import unknown from "./a.js"//unknown 这个是一个变量名字,可以随便取一个
    

    一条import语句同时输入默认方法和其它接口,可以写成下面这样,其实就是前面是指默认的方法,后面跟着个逗号,后面就是三种常用的表达方式

    import num,* as person from "./a.js";//num这个是一个变量名字,可以随便取一个
    

    export和import的复合写法

    export {name,age} from "./a,js";
    

    上面的代码其实就是下面这两条语句的复合写法

    import {name,age} from "./a.js";
    export {name,age};
    

    接口改为默认接口写法

    export {job as default} from "./a.js";
    

    默认接口改为接口的方法

    export {default as job} from "./a.js";
    
    带有*号的现在没有对应的复合写法

    module的加载方式

    加上defer或者async脚本都是异步执行,但是不同的是defer是“渲染完再执行”,async是“下载完就执行”。

    <script src="./a.js" defer></script>
    <script src="./a.js" async></script>
    

    加载规则
    浏览器加载 ES6 模块,也使用<script>标签,但是要加入type="module"属性。

    <script type="module" src="./a.js"></script>
    

    浏览器对于带有type="module"的<script>,都是异步加载,不会造成堵塞浏览器,即等到整个页面渲染完,再执行模块脚本,等同于打开了<script>标签的defer属性。

    关于class就介绍这么多,希望对你有所帮助,如果想看更详细的资料,请狠狠的点击我

    相关文章

      网友评论

          本文标题:module

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