美文网首页
ES6模块化与异步编程

ES6模块化与异步编程

作者: 喑宝儿 | 来源:发表于2021-06-22 19:36 被阅读0次
    1、ES6模块化规范
    • 每个js文件都是一个独立的模块

    • 导入其他模块成员使用import关键字

    • 向外共享模块成员使用export关键字

    2、Node使用ES6模块化

    (1)node.js版本要高于v14.15.1

    (2)在package.json中根节点加上"type": "module"

    3、默认导出导入

    (1)默认导出(只能使用一次export default)

    // export default = {要导出的内容}
    let a = 10
    let b = 20
    function show() {}
    export default = {
      a,
      show
    }
    

    (2)默认导入(变量名要符合规范)

    // import 模块名 from 导入的模块
    import m1 from './默认导出.js'
    
    4、按需导出导入

    (1)按需导出

    export let a = 'hello '
    export let b = 'world'
    let c = 'kitty'
    export function say(a, b) {
      console.log(a + b)
    }
    

    (2)按需导入

    import { a, b, say } from './按需导出.js'
    

    (3)注意事项

    每个模块中可以多次按需导出

    按需导入必须与按需导出的变量名称一致

    按需导出可以和默认导出一起使用

    可以使用as给按需导入的变量重命名,重命名后必须是用新名称

    5、直接导入并执行模块中的代码

    如果只想运行某个模块中的代码,不想得到其中导出的内容,可以直接运行

    import '要导入的文件'
    

    不管是按需导入,还是默认导入,只要导入模块,其中的代码都会自动执行

    6、Promise(ES6新增对象)

    (1)回调地狱:多层回调函数相互嵌套(代码的耦合性太强,难以维护;大量冗余代码嵌套,阅读性差)

    (2)Promise

    • Promise是一个构造函数,new出来的Promise实例对象代表一个一步操作:const p = new Promise()

    • Promise.prototype上包含一个.then()方法,可以通过原型链的方式访问到

    • .then()方法用来预先制定成功和失败的回调函数

      // p.then(成功的回调, 失败的回调)
      // 调用.then()方法时,成功的回调函数是必选的,失败的回调函数是可选的
      p.then(result => {}, error => {})
      

    (3).then()的特性

    如果上一个.then()返回一个Promise对象,则可以使用下一个.then()为Promise对象设置处理函数

    (4).catch():捕获执行时发生的错误

    (5)Promise.all()会发起并行的Promise异步操作。执行完所有的操作才会执行.then()

    (6)Promise.race()发起并行的Promise异步操作,谁执行最快结果为哪个

    (7)async/await

    作用:简化Promise.then()的调用

    • async将一个普通函数声明称为异步函数,用await声明的Promise对象,会返回.then()执行后的返回值

    • 用async声明的函数,在第一个await之前是同步执行的,await开始为异步执行

    7、事件循环

    (1)JS是单线程执行的,在主线程上会有同步和异步任务,碰到异步任务会交给宿主环境执行,主线程先执行同步任务

    (2)宿主环境执行完异步任务之后,会将还没有执行的回调函数放入事件队列中等待执行

    (3)主线程上的同步任务执行完后,会查看任务队列中是否有待执行的任务,如果有,将任务队列中的任务在主线程上执行

    (4)然后进行事件循环,重复之前的操作

    8、宏任务和微任务

    (1)异步任务分为宏任务和微任务

    (2)宏任务:异步Ajax请求、定时器、文件操作、其它宏任务

    (3)微任务:.then()/catch()/finally()、process.nextTick、其它微任务

    (4)微任务~宏任务1~微任务~宏任务2~微任务……

    相关文章

      网友评论

          本文标题:ES6模块化与异步编程

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