0


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()

  1. 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()


本文转载自: https://blog.csdn.net/ITjun666/article/details/127538722
版权归原作者 ITjun666 所有, 如有侵权,请联系我们删除。

“JavaScript的闭包和promise”的评论:

还没有评论