这是我参与「第五届青训营 」伴学笔记创作活动的第 12 天
ES6模块化&一步编程高级用法
ES6模块化
(1)目的实现模块化统一规范。ES6是浏览器端和服务器端通用的模块化开发规范
-
ES6中模块化规范定义
- 每个js文件都是一个独立的模块
- 导入其他模块成员使用import关键字
- 向外共享模块成员使用export关键字
(3)基本语法
默认导出:export default
export default { n1 }
默认导入:import from
//从01.js模块当中导入export default向外共享的成员
import m1 from './01.js'
按需导出:export
export let s1 = '111'
export function say(){}
按需导入:import{}from'模块标识符'
import{ s1,s2 } from './01.js'
直接导入并执行模块中的代码:import '模块路径'
import{ s1,s2 } from './01.js'
Promise
为了解决回调地狱的问题
(1)回调地狱 多层回调函数的相互嵌套,就形成了回调地狱
缺点:代码耦合性太强,牵一发而动全身,难以维护;大量冗余的代码相互嵌套,可读性变差
(2)Promise
(3)基于回调函数顺序读取文件的内容
then-fs的基本使用
then()方法的特性————返回一个新的Promise实例对象
通过catch捕获错误————Promise.prototype.catch方法
//例如:
then.readFile('./01.txt','utf8').catch(err=>{ console.log(err.message)}
async/await
目的:简化Promise异步操作
此时,加上了await,r1,r2,r3不再是一个Promise对象,而是文件里面真正的内容。并且注意,如果使用了await,就要加上async
注意事项:
1.如果在function 中使用了 await,则function 必须被 async 修饰
2.在 async 方法中,第一个 await 之前的代码会同步执行,await 之后的代码会异步执行
EventLoop
异步同步任务
为了防止某个耗时任务导致程序假死的问题,JavaScript 把待执行的任务分为了两类
同步任务 (synchronous) 又叫做非耗时任务,指的是在主线程上排队执行的那些任务只有前一个任务执行完毕,才能执行后一个任务 异步任务 (asynchronous) 又叫做耗时任务,异步任务由JavaScript 委托给宿主环境进行执行当异步任务执行完成后,会通知JavaScript 主线程执行异步任务的回调函数
同步任务和异步任务执行过程
EventLoop(事件循环)概念
如上图,JavaScript主线程从“任务队列”中读取异步任务的会带哦函数,放到执行栈中依次执行。这个过程不断循环,整个运行机制又称为EventLoop.