持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情
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 中有未执行完的任务,先执行他们这样算是完成了一轮事件循环。接下来查看
宏任务的队列中是否有异步代码,有的话执行第二轮的事件循环,以此类推。