2020年8月

JS是单线程的。所谓单线程,即在某一时刻,只能做一件事,需要做的一堆事情需要排着队,一个接一个的被处理。但是,如果做一件事所需要的时间太长了,那么将会阻塞后面事情的处理。比如你在等待一张图的加载,只能干等着,其他什么也做不了。显然,这种体验是非常不好的。因此为了解决这个问题,JS采用了事件循环的机制。

在JS中 首先将执行的代码,分为同步任务和异步任务。同步任务可以理解为瞬间完成,异步任务在异步队列中等待同步任务执行完成后,在进行执行。

异步任务又可以分为微任务(MicroTask)和宏任务(MacroTask)。微任务,优先执行,宏任务后执行。

三者都是用来改变this指向的

区别

bind fn.bind(obj) 返回一个新的函数,未进行调用,返回fn
call fn.call(obj,arg1,arg2...arg) 传递参数为多个,直接调用返回fn()
apply fn.apply(obj,Array) 传递两个参数,第二个参数为数组,直接调用返回fn()

性能上,据一些大神研究。当参数较少时(三个一下),三者的性能差不多。当参数较多时,call的性能较好。