采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师您好,请问 nextTick 去执行 flushCallbacks 的时候,为什么 const copies = callbacks.slice(0) 要定义一个 callbacks 的副本呢,直接遍历 callbacks 不行吗,这里是有什么特殊逻辑吗
因为 callbacks 的执行过程中,如果某个 callback 移除了另一个 callback,那么在遍历的过程中可能会出错,但是 slice 之后,返回的是副本,这种情况下移除的也是原始的 callback,在执行过程不会出错
请问老师,什么样的情况下会移除另外的 callback 呢,脑补不出来这样的场景,希望老师指点。
一般情况是不需要的,但是不排除有可能有这种情况,就像 EventEmitter 的实现循环派发事件的时候,也会拷贝一份数组,防止这种情况出现,作为一个框架和库,你不能假设用户的操作,你要做的是尽量确保在一些边界情况下,你的代码还能正常 work。
非常感谢老师,辛苦了
登录后可查看更多问答,登录/注册
全方位讲解 Vue.js 源码,进阶高级工程师
3.1k 4
1.6k 20
1.3k 14
1.2k 12
2.2k 12