JavaScript的闭包和promise

闭包:

概述: 

函数嵌套函数,内部函数可以使用外部函数的参数和变量,参数和变量不会被垃圾回收机制所回收.

预编译阶段:

开辟一个内存空间

将对应的代码放到这个内存空间

执行阶段:

将对应的函数开辟的这个放在执行栈上

执行栈就开始执行对应的函数对应的空间代码块

 这个代码任意过哦需要开辟空间,他就在这个对应的这个函数的内存空间上开辟

 当你不需要使用这个函数了对应的函数的内存空间就会被回收,name里面的代码开辟的空间也就被回收

 闭包的优点:

1.内部可以使用外部函数的参数和变量,让我们的参数和变量的作用扩大

2.让一个变量长期储存在内存中,不被释放

闭包的缺点:

1.内部函数要一直保持对外部函数的引用

2.因为不会被回收,内存空间会一直被占用

闭包的应用:

节流: 在一定的时间间隔内,任务只执行一次

 

防抖: 任务频繁触发的情况下,只有当任务触发的时间间隔超过指定的时间间隔,任务才会执行

 

函数的柯里化:

(将多个参数的函数拆分为多个单参数的函数 可以自由的组合)

核心 : 参数没有够返回对应的函数 参数够了返回结果

 

Promise:

概述:

promise是es6新增的一个类,这个类翻译为承诺,它有三种状态等待状态,成功状态,拒绝状态。它被设计为异步的,它里面的内容是异步的(方法为异步的)

 promise的三种状态:

1.等待状态(没有处理) pending

2.成功状态(有对应的处理) fulfilled (里面resolve方法调用)

3.失败状态(有对应的处理)rejected (里面代码报错或者调用reject)

promise的构建:

1.里面传递的是一个函数

2.有两个参数,第一个参数是成功状态resolve  第二个参数是失败状态reject

 promise的原型方法:

then catch finally 返回的都是一个promise对象,都能使用链式调用

1.promise.then()

 2. promise.catch()

 成功的函数 resolve  失败的函数 reject

 promise的静态方法:

resolve 方法 reject 方法  ,返回一个成功的promise对象

 all传入一个promise数组 执行promise数组里面的promise (有一个reject,则全都会是reject

all方法返回的是一个promise对象 如果全部成功对应的promiseResult的结果就是所有成功 否则就是错误

 

 回调函数:

 传入一个函数作为回调函数 在对应代码执行完成调用

 使用回调函数变同步 (解决异步的问题)

 回调地狱:

多个回调函数嵌套会形成回调地狱

  (回调函数的无线嵌套 让代码失去可读性 让代码失去维护的意义)

 用promise解决回调地狱:

 async和await

概述:

async和await是对应的俩个连用的关键词,async是修饰函数的,await是修饰promise的。await只能在async内使用。async修饰的函数返回一个promise对象,await修饰的promise对象会占用当前的线程直到对应的promise执行完成才会释放。

async:

 async修饰的函数返回的promise对象 里面的报错 会使当前的promise对象的状态为rejected

        //如果里面的return内容将会传递给对应的then

 async和await解决回调地狱:

 

 

 

async总结:

1.async修饰函数的await修饰promise对象

2.async里面使用await 那么如果这个await修饰的promise没有执行完,那么对应的async修饰的函数返回promise状态时pending。

3.如果async修饰的函数内什么都没有那么对应返回的promise状态是成功(默认函数返回undefined)

4.async修饰的函数返回值就是成功返回的值传递给then方法async修饰的函数如果里面报错那么

返回的是失败

5.await只能存在于async函数里面

事件轮询:

同步代码执行比异步代码快

同步代码的执行是利用对应的js引擎解析的

异步代码执行是利用事件轮询机制执行的

 

 1.先找到script标签里面的微任务

2.按照微任务队列完成对应的微任务

3.进入下一个宏任务 执行对应的宏任务

4.进行宏任务对应微任务队列,执行对应的微任务

在进行到下一个任务 执行对应的微任务

直到对应的宏任务队列和微任务队列被清空

宏任务:

script        定时器 (setInterval和setTimeout)        事件

微任务:

promise.then()

promise.catch()

promise.finally()

promise.nextTick()

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值