持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第18天,点击查看活动详情
一。bind、call、apply 区别?如何实现一个bind?
作用:call、apply、bind作用是改变函数执行时的上下文,简而言之就是改变函数运行时的this指向。
区别:
- call() 第一个参数设置this指向,后面的参数是方法的原始参数。
- apply() 第一个参数设置this指向,后面的参数是方法的原始参数,需要用一个数组包裹起来。
- bind() 用法跟call一样,方法返回一个新的方法,需要接收bind方法的返回值,再执行返回的方法。
二。说说你对正则表达式的理解?应用场景?
是什么:
它的设计思想是用一种描述性的语言定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的
在 JavaScript中,正则表达式也是对象,构建正则表达式有两种方式:
1.字面量创建,其由包含在斜杠之间的模式组成
const re = /\d+/g;
2.调用RegExp对象的构造函数
const re = new RegExp("\d+","g");
const rul = "\d+"
const re1 = new RegExp(rul,"g");
三。说说你对事件循环的理解
是什么:
首先,JavaScript是一门单线程的语言,意味着同一时间内只能做一件事,但是这并不意味着单线程就是阻塞,而实现单线程非阻塞的方法就是事件循环。
在JavaScript中,所有的任务都可以分为:
- 同步任务:立即执行的任务,同步任务一般会直接进入到主线程中执行
- 异步任务:异步执行的任务,比如
ajax网络请求,setTimeout定时函数等
从上面我们可以看到,同步任务进入主线程,即主执行栈,异步任务进入任务队列,主线程内的任务执行完毕为空,会去任务队列读取对应的任务,推入主线程执行。上述过程的不断重复就事件循环
宏任务与微任务:
所有的异步任务又分为宏任务和微任务。
微任务:
一个需要异步执行的函数,执行时机是在主函数执行结束之后、当前宏任务结束之前
常见的微任务有:
- Promise.then
- process.nextTick(Node.js)
宏任务:
宏任务的时间粒度比较大,执行的时间间隔是不能精确控制的,对一些高实时性的需求就不太符合
常见的宏任务有:
- setTimeout/setInterval
- setImmediate、I/O(Node.js)
async与await:
async 是异步的意思,await则可以理解为 async wait。所以可以理解async就是用来声明一个异步方法,而 await是用来等待异步方法执行