1.call 和 apply,bind 的区别2.EventLoop 事件循环机制

91 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

2.jpg

1.call 和 apply,bind 的区别

共同点:

1、都是用来改变函数的 this 对象的指向的。

2、第一个参数都是 this 要指向的对象。

3、都可以利用后续参数传参。

2.不同点

call 方法调用一个函数, 其具有一个指定的 this 值和分别地提供的参数(参数的列表)。

注意:

该方法的作用和 apply() 方法类似,只有一个区别,就是 call()方法接受的是若干个参数

的列表,而 apply()方法接受的是一个包含多个参数的数组

方法调用一个具有给定 this 值的函数,以及作为一个数组(或类似数组对象)提供的参数。

注意:

call()方法的作用和 apply() 方法类似,区别就是 call()方法接受的是参数列表,而 apply()

方法接受的是一个参数数组

bind()方法创建一个新的函数,当这个新的函数被调用时,其 this 值为提供的值,其参数列

表前几项,置为创建时指定的参数序列

2.EventLoop 事件循环机制

JavaScript 的事件分两种,宏任务(macro-task)和微任务(micro-task)

宏任务:包括整体代码 script,setTimeout,setInterval

微任务:Promise.then(非 new Promise),process.nextTick(node 中)

事件的执行顺序——先执行宏任务,然后执行微任务,任务有同步的任务和异步的任务,同

步的进入主线程,异步的进入 Event Table 并注册函数,异步事件完成后,会将回调函数放在队

列中,如果还有异步的宏任务,那么就会进行循环执行上述的操作。 总结:

事件循环先执行宏任务,其中同步任务立即执行,异步任务加载到对应的 Event Queue 中,

微任务也加载到对应的微任务的 Event Queue 中,所有的同步微任务执行完之后,如果发现微任

务的 Event Queue 中有未执行完的任务,先执行他们这样算是完成了一轮事件循环。接下来查看

宏任务的队列中是否有异步代码,有的话执行第二轮的事件循环,以此类推。