面经练习(二)

1.const要完全不能修改怎么做

在这里插入图片描述
利用 Object.defineProperty里面的writable属性

还可以利用Object.freeze()进行冻结
原理:
在这里插入图片描述

2. Object.defineProperty的用法

Object.defineProperty()函数是给对象设置属性的。
在这里插入图片描述

在这里插入图片描述

3.http请求头:

在这里插入图片描述

4.post请求的四种数据格式

1.application/json:这是最常见的 json 格式
2.application/x-www-form-urlencoded浏览器的原生 form 表单
3.multipart/form-data:这一种是表单格式的
4.text/xml

5.有关promise

有关promise
支持链式写法,then和catch返回的都是一个全新的Promise对象,在执行这两个方法后,不论返回的数据类型是什么,都会被包装成一个全新的Promise对象。返回的数据会传递到下一个链式方法里作为参数

Promise.resolve(value):
在这里插入图片描述
当一个实例如果不是promise对象,可以用Promise.resolve转换成promise对象

Promise.reject(error):
在这里插入图片描述

Promise.all(array):接收一个 promise对象的数组作为参数,当这个数组里的所有promise对象全部变为resolved的时候,它才会去调用 .then 方法
在这里插入图片描述
如果有一个变为rejected,会把第一个rejected的promise的返回值,传给下一个回调函数

Promise.race(array):接收一个 promise对象的数组作为参数,当这个数组里只要有一个promise对象发生状态改变(进入rejec或fulfilled状态)的时候,它才会去调用 .then 方法。
在这里插入图片描述

6.有关宏任务和微任务

有关宏任务和微任务
从event loop到async await来了解事件循环机制

event loop:
1.首先判断JS是同步还是异步,同步就进入主线程运行,异步就进入event table。
2.异步任务在event table中注册事件,当满足触发条件后(触发条件可能是延时也可能是ajax回调),被推入event queue,宏任务进入宏任务event queue,微任务进入微任务event queue
3.同步任务进入主线程后一直执行,直到主线程空闲时,才会去event queue中查看是否有可执行的异步任务,如果有就推入主线程中,先推入微任务event queue的任务,再推入宏任务event queue

异步任务分为宏任务和微任务
宏任务(macro-task):包括整体代码script,setTimeout,setInterval。
微任务(micro-task):Promise,process.nextTick。

在划分宏任务、微任务的时候并没有提到async/await因为async/await的本质就是Promise。
在这里插入图片描述
结果为 374125 注意6不会输出,因为里层的promise在输出1的时候,resolve状态已经实现了,不会改变。
在这里插入图片描述
在这里插入图片描述
注意一个promise中,.then是同步的,必须第一个then执行完毕(有结果,有进入队列的),下一个then才会进入微任务队列

输出结果:172384650
此题视频详解

7.async/await

从event loop到async await来了解事件循环机制

可以让异步的代码写的更加简洁
在这里插入图片描述

async function async1() {
  console.log('2')
  const data = await async2()
  console.log(data)
  console.log('8')
}

async function async2() {
  return new Promise(function (resolve) {
    console.log('3')
    resolve('await的结果')
  }).then(function (data) {
    console.log('6')
    return data
  })
}
console.log('1')

setTimeout(function () {
  console.log('9')
}, 0)

async1()

new Promise(function (resolve) {
  console.log('4')
  resolve()
}).then(function () {
  console.log('7')
})
console.log('5')

在这里插入图片描述

setTimeout(function () {
  console.log('8')
}, 0)

async function async1() {
  console.log('1')
  const data = await async2()
  console.log('6')
  return data
}

async function async2() {
  return new Promise(resolve => {
    console.log('2')
    resolve('async2的结果')
  }).then(data => {
    console.log('4')
    return data
  })
}

async1().then(data => {
  console.log('7')
  console.log(data)
})

new Promise(function (resolve) {
  console.log('3')
  resolve()
}).then(function () {
  console.log('5')
})

在这里插入图片描述

8. promise如何异步调用的

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值